You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
1.8 KiB
95 lines
1.8 KiB
package main
|
|
|
|
import (
|
|
"github.com/veandco/go-sdl2/sdl"
|
|
"math"
|
|
)
|
|
|
|
func setPixel(x, y int, c sdl.Color, pixels []byte) {
|
|
index := (y*winWidth + x) * 4
|
|
if index < len(pixels) - 4 && index >= 0 {
|
|
pixels[index] = c.R
|
|
pixels[index+1] = c.G
|
|
pixels[index+2] = c.B
|
|
//pixels[index+3] = c.A
|
|
}
|
|
}
|
|
|
|
func clearScreen(pixels []byte) {
|
|
for i := range pixels {
|
|
pixels[i] = 0
|
|
}
|
|
}
|
|
|
|
func getCenter() pos {
|
|
return pos{int32(winWidth / 2), int32(winHeight / 2)}
|
|
}
|
|
|
|
func float32Lerp(a, b, pct float32) float32 {
|
|
return a + pct * (b - a)
|
|
}
|
|
|
|
func byteLerp(b1, b2 byte, pct float32) byte {
|
|
return byte(float32(b1) + pct * (float32(b2) - float32(b1)))
|
|
}
|
|
|
|
func colorLerp(c1, c2 sdl.Color, pct float32) sdl.Color {
|
|
return sdl.Color{
|
|
R: byteLerp(c1.R, c2.R, pct),
|
|
G: byteLerp(c1.G, c2.G, pct),
|
|
B: byteLerp(c1.B, c2.B, pct),
|
|
A: byteLerp(c1.A, c2.A, pct),
|
|
}
|
|
}
|
|
|
|
func clamp(min, max, v int) int {
|
|
if v < min {
|
|
return min
|
|
} else if v > max {
|
|
return max
|
|
}
|
|
return v
|
|
}
|
|
|
|
func getGradient(c1, c2 sdl.Color) []sdl.Color {
|
|
var result = make([]sdl.Color, 256)
|
|
|
|
for i := range result {
|
|
pct := float32(i) / float32(255)
|
|
result[i] = colorLerp(c1, c2, pct)
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
func getDualGradient(c1, c2, c3, c4 sdl.Color) []sdl.Color {
|
|
var result = make([]sdl.Color, 256)
|
|
|
|
for i := range result {
|
|
pct := float32(i) / float32(255)
|
|
if pct < 0.5 {
|
|
result[i] = colorLerp(c1, c2, pct * 2)
|
|
} else {
|
|
result[i] = colorLerp(c3, c4, pct * 1.5 - 0.5)
|
|
}
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
func getMouseState() mouseState {
|
|
mouseX, mouseY, s := sdl.GetMouseState()
|
|
state := mouseState{
|
|
Left: s & sdl.BUTTON_LEFT != 0,
|
|
Right: s & sdl.BUTTON_RIGHT != 0,
|
|
x: mouseX,
|
|
y: mouseY,
|
|
}
|
|
return state
|
|
}
|
|
|
|
func getSelectedCell(x, y int32, size int) (int, int) {
|
|
cellX := int(math.Floor(float64(x / int32(size))))
|
|
cellY := int(math.Floor(float64(y / int32(size))))
|
|
return cellX, cellY
|
|
} |