2024-02-27 14:45:23 +01:00
|
|
|
package systems
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
2024-03-01 18:10:09 +01:00
|
|
|
"image/color"
|
2024-02-27 14:45:23 +01:00
|
|
|
"openquell/assets"
|
2024-04-07 12:05:37 +02:00
|
|
|
"openquell/config"
|
2024-02-27 14:45:23 +01:00
|
|
|
"openquell/observers"
|
2024-03-17 16:30:11 +01:00
|
|
|
"strings"
|
2024-02-27 14:45:23 +01:00
|
|
|
|
|
|
|
|
"github.com/hajimehoshi/ebiten/v2"
|
|
|
|
|
"github.com/mlange-42/arche/ecs"
|
2024-03-10 13:05:31 +01:00
|
|
|
"github.com/solarlune/ldtkgo"
|
2024-02-27 14:45:23 +01:00
|
|
|
)
|
|
|
|
|
|
2024-03-17 16:30:11 +01:00
|
|
|
const MaxLetters int = 52
|
|
|
|
|
|
2024-02-27 14:45:23 +01:00
|
|
|
type HudSystem struct {
|
|
|
|
|
World *ecs.World
|
|
|
|
|
Cellsize int
|
|
|
|
|
Observer *observers.GameObserver
|
2024-03-10 13:05:31 +01:00
|
|
|
Plan *ldtkgo.Level
|
2024-03-18 19:34:57 +01:00
|
|
|
MenuIcon *ebiten.Image
|
2024-02-27 14:45:23 +01:00
|
|
|
}
|
|
|
|
|
|
2024-03-10 13:05:31 +01:00
|
|
|
func NewHudSystem(world *ecs.World, plan *ldtkgo.Level) System {
|
2024-02-27 14:45:23 +01:00
|
|
|
system := &HudSystem{
|
|
|
|
|
Observer: observers.GetGameObserver(world),
|
|
|
|
|
World: world,
|
|
|
|
|
Plan: plan,
|
2024-03-18 19:34:57 +01:00
|
|
|
MenuIcon: assets.Assets["menu"],
|
2024-02-27 14:45:23 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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)
|
2024-03-01 18:10:09 +01:00
|
|
|
/*
|
|
|
|
|
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())
|
2024-03-17 16:30:11 +01:00
|
|
|
level := fmt.Sprintf("Level %d: %s", system.Plan.PropertyByIdentifier("level").AsInt(),
|
|
|
|
|
strings.ReplaceAll(system.Plan.Identifier, "_", " "))
|
2024-03-18 19:34:57 +01:00
|
|
|
des := system.Plan.PropertyByIdentifier("description").AsString()
|
2024-03-01 18:10:09 +01:00
|
|
|
|
|
|
|
|
assets.FontRenderer.Renderer.SetSizePx(20)
|
|
|
|
|
assets.FontRenderer.Renderer.SetTarget(screen)
|
|
|
|
|
|
2024-04-04 17:53:22 +02:00
|
|
|
// FIXME: do not use hard coded values for HUD
|
2024-03-18 19:34:57 +01:00
|
|
|
system.Print(score, 450, 22)
|
2024-03-17 16:30:11 +01:00
|
|
|
x := system.GetTextXCentered(des)
|
|
|
|
|
|
2024-04-04 17:53:22 +02:00
|
|
|
system.Print(des, x, 374)
|
2024-03-01 18:10:09 +01:00
|
|
|
system.Print(level, 10, 22)
|
2024-03-18 19:34:57 +01:00
|
|
|
|
|
|
|
|
op.GeoM.Reset()
|
|
|
|
|
op.GeoM.Translate(600, 0)
|
|
|
|
|
screen.DrawImage(system.MenuIcon, op)
|
2024-03-01 18:10:09 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (system *HudSystem) Print(text string, x, y int) {
|
2024-04-07 12:05:37 +02:00
|
|
|
fg := &config.FontColorFG
|
2024-03-01 18:10:09 +01:00
|
|
|
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)
|
2024-02-27 14:45:23 +01:00
|
|
|
}
|
2024-03-17 16:30:11 +01:00
|
|
|
|
|
|
|
|
func (system *HudSystem) GetTextXCentered(text string) int {
|
|
|
|
|
size := len(text)
|
|
|
|
|
lettersize := system.Observer.Width / MaxLetters
|
|
|
|
|
descsize := lettersize * size
|
|
|
|
|
return system.Observer.Width/2 - descsize/2
|
|
|
|
|
}
|