gas-station-sim/system/render.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
}