/
rainbow_upgrade.go
69 lines (54 loc) · 1.41 KB
/
rainbow_upgrade.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package breakout
import (
"image/color"
"image/color/palette"
"math/rand"
"golang.org/x/image/colornames"
)
var rainbowColors = palette.Plan9
type rainbowUpgrade struct {
duration int
changeFrequency int
}
func newRandomRainbowUpgrade() upgrade {
return rainbowUpgrade{
duration: 60 * (5 + rand.Intn(10)),
changeFrequency: 30 + rand.Intn(200),
}
}
var _ upgrade = rainbowUpgrade{}
func (r rainbowUpgrade) farbe() color.Color {
return colornames.Darkorange
}
func (r rainbowUpgrade) radius() float64 {
return 15
}
func (r rainbowUpgrade) collect(world *world, plattform *entity) {
world.rainbowUpgradeRemainingTime = r.duration
world.rainbowUpgradeChangeFrequency = r.changeFrequency
}
type rainbowModeColorChangeComponent struct {
newColor color.Color
}
func (w *world) changeColorsInRainbowMode() {
if w.rainbowUpgradeRemainingTime <= 0 {
for entity := range w.entities {
entity.hatRainbowModeColorChangeComponent = false
}
return
}
w.rainbowUpgradeRemainingTime--
if w.rainbowUpgradeRemainingTime%w.rainbowUpgradeChangeFrequency != 0 {
return
}
for entity := range w.entities {
if entity.hatSteinComponent && entity.steinComponent.hatUpgrade {
continue
}
neueFarbe := rainbowColors[rand.Intn(len(rainbowColors))]
entity.hatRainbowModeColorChangeComponent = true
entity.rainbowModeColorChangeComponent = rainbowModeColorChangeComponent{
newColor: neueFarbe,
}
}
}