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 Clamp(c rl.Color, min uint8, max uint8) rl.Color { return rl.NewColor( uint8(rl.Clamp(float32(c.R), float32(min), float32(max))), uint8(rl.Clamp(float32(c.G), float32(min), float32(max))), uint8(rl.Clamp(float32(c.B), float32(min), float32(max))), uint8(rl.Clamp(float32(c.A), float32(min), float32(max))), ) } 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 }