68 lines
1.4 KiB
Go
68 lines
1.4 KiB
Go
package graphics
|
|
|
|
import (
|
|
"fmt"
|
|
"math/rand"
|
|
rl "github.com/gen2brain/raylib-go/raylib"
|
|
)
|
|
|
|
var (
|
|
FlourescentHues = []float32{
|
|
0, // hot magenta-red
|
|
30, // neon orange
|
|
60, // acid yellow
|
|
120, // laser green
|
|
180, // cyan
|
|
210, // electric blue
|
|
270, // ultraviolet purple
|
|
}
|
|
FlourescentColors = makeFlourescentColors()
|
|
)
|
|
|
|
func makeFlourescentColors() []rl.Color {
|
|
fc := make([]rl.Color, len(FlourescentHues))
|
|
for i, hue := range(FlourescentHues) {
|
|
fc[i] = rl.ColorFromHSV(hue, 1.0, 1.0)
|
|
}
|
|
fmt.Printf("flourescent colors --> %v\n", fc)
|
|
|
|
return fc
|
|
}
|
|
|
|
type ColorCycle interface {
|
|
Next() rl.Color
|
|
}
|
|
|
|
type ArrayBackedColorCycle struct {
|
|
colors []rl.Color
|
|
index int
|
|
}
|
|
|
|
func NewFixedColorCycle(colors []rl.Color) *ArrayBackedColorCycle {
|
|
return &ArrayBackedColorCycle {
|
|
colors: colors,
|
|
index: 0,
|
|
}
|
|
}
|
|
|
|
func (c ArrayBackedColorCycle) Shuffle(seed int64) *ArrayBackedColorCycle {
|
|
r := rand.New(rand.NewSource(seed))
|
|
cprime := &ArrayBackedColorCycle {
|
|
colors: make([]rl.Color, len(c.colors)),
|
|
index: 0,
|
|
}
|
|
copy(cprime.colors, c.colors)
|
|
r.Shuffle(len(c.colors), func(i, j int) {
|
|
cprime.colors[i], cprime.colors[j] = cprime.colors[j], cprime.colors[i]
|
|
})
|
|
fmt.Printf("shuffled colors --> %v\n", cprime.colors)
|
|
return cprime
|
|
}
|
|
|
|
func (c *ArrayBackedColorCycle) Next() rl.Color {
|
|
color := c.colors[c.index]
|
|
c.index = (c.index + 1) % len(c.colors)
|
|
return color
|
|
}
|
|
|