package systems import ( "fmt" "image/color" "openquell/assets" "openquell/observers" "github.com/hajimehoshi/ebiten/v2" "github.com/mlange-42/arche/ecs" "github.com/solarlune/ldtkgo" ) type HudSystem struct { World *ecs.World Cellsize int Observer *observers.GameObserver Plan *ldtkgo.Level } func NewHudSystem(world *ecs.World, plan *ldtkgo.Level) System { system := &HudSystem{ Observer: observers.GetGameObserver(world), World: world, Plan: plan, } return system } func (system *HudSystem) Update() error { return nil } func (system *HudSystem) Draw(screen *ebiten.Image) { op := &ebiten.DrawImageOptions{} screen.DrawImage(assets.Assets["hud"], op) /* ebitenutil.DebugPrintAt(screen, fmt.Sprintf( "FPS: %02.f TPS: %02.f Level %s: %s", ebiten.ActualFPS(), ebiten.ActualTPS(), system.Plan.Name, system.Plan.Description, ), 10, 10) */ score := fmt.Sprintf("Score: %d", system.Observer.GetScore()) level := fmt.Sprintf("Level %d %s", system.Plan.PropertyByIdentifier("level").AsInt(), system.Plan.PropertyByIdentifier("name").AsString()) assets.FontRenderer.Renderer.SetSizePx(20) assets.FontRenderer.Renderer.SetTarget(screen) system.Print(score, 515, 22) system.Print(system.Plan.PropertyByIdentifier("description").AsString(), 10, 470) system.Print(level, 10, 22) } func (system *HudSystem) Print(text string, x, y int) { fg := &color.RGBA{0x4c, 0, 0xff, 255} bg := &color.RGBA{0x9a, 0x6f, 0xff, 255} assets.FontRenderer.Renderer.SetColor(bg) assets.FontRenderer.Renderer.Draw(text, x, y) assets.FontRenderer.Renderer.SetColor(fg) assets.FontRenderer.Renderer.Draw(text, x-1, y-1) }