70 lines
1.4 KiB
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)
|
|
}
|