gas-station-sim/system/renderui.go

70 lines
1.4 KiB
Go

package system
import (
"fmt"
"image"
"image/color"
"code.rocketnine.space/tslocum/gas-station-sim/world"
"code.rocketnine.space/tslocum/gohan"
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/ebitenutil"
)
type RenderUI struct {
img *ebiten.Image
}
func (r *RenderUI) Update(_ gohan.Entity) error {
if r.img == nil {
r.img = ebiten.NewImage(world.ScreenWidth, world.ScreenHeight)
}
if !world.GameStarted {
return nil
}
if world.Name == "" {
}
return nil
}
func (r *RenderUI) Draw(_ gohan.Entity, screen *ebiten.Image) error {
if !world.GameStarted {
return nil
}
if world.Name == "" {
if world.Ticks > 6 {
r.drawText(screen, 2, 32, 64, true, "What is your name?")
if world.Ticks > 8 {
r.drawText(screen, 2, 64, 128, true, fmt.Sprintf("%s", world.NameInput))
}
}
}
return nil
}
func (r *RenderUI) drawText(screen *ebiten.Image, scale int, x int, y int, fill bool, text string) {
const (
paddingW = 6
paddingH = 4
)
l := len(text)
textW, textH := 6*l+paddingW, 12+paddingH
rect := image.Rect(x, y, x+textW*scale, y+textH*scale)
screen.SubImage(rect).(*ebiten.Image).Fill(color.White)
screen.SubImage(rect.Inset(1)).(*ebiten.Image).Fill(color.Black)
r.img.Clear()
ebitenutil.DebugPrintAt(r.img, text, 2+x/scale, y/scale)
op := &ebiten.DrawImageOptions{}
op.GeoM.Scale(float64(scale), float64(scale))
//op.ColorM.ChangeHSV(0, 0, 0.8)
screen.DrawImage(r.img, op)
}