59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
package system
|
|
|
|
import (
|
|
"image/color"
|
|
|
|
"code.rocketnine.space/tslocum/gas-station-sim/world"
|
|
"code.rocketnine.space/tslocum/gohan"
|
|
"github.com/hajimehoshi/ebiten/v2"
|
|
)
|
|
|
|
const (
|
|
gradientWidth = 128
|
|
gradientHeight = 64
|
|
)
|
|
|
|
type Render struct {
|
|
x, y float64
|
|
dx, dy float64
|
|
i *ebiten.Image
|
|
}
|
|
|
|
func (r *Render) Update(e gohan.Entity) error {
|
|
if r.i == nil {
|
|
r.i = ebiten.NewImage(gradientWidth, gradientHeight)
|
|
for y := 0; y < 64; y++ {
|
|
for x := 0; x < 128; x++ {
|
|
vx := x
|
|
if vx == 0 {
|
|
vx = 1
|
|
}
|
|
brightness := uint8(float64(255) * (float64(vx) / gradientWidth))
|
|
r.i.Set(x, y, color.RGBA{brightness, brightness, brightness, 255})
|
|
}
|
|
}
|
|
|
|
r.dx, r.dy = 1, 1
|
|
return nil
|
|
}
|
|
|
|
r.x += r.dx
|
|
r.y += r.dy
|
|
|
|
if r.x == 0 || r.x == world.ScreenWidth-gradientWidth {
|
|
r.dx *= -1
|
|
}
|
|
if r.y == 0 || r.y == world.ScreenHeight-gradientHeight {
|
|
r.dy *= -1
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (r *Render) Draw(e gohan.Entity, screen *ebiten.Image) error {
|
|
op := &ebiten.DrawImageOptions{}
|
|
op.GeoM.Translate(r.x, r.y)
|
|
screen.DrawImage(r.i, op)
|
|
return nil
|
|
}
|