From a2ed7782b2fe2bcceff0e6f35f107a2c025a39b1 Mon Sep 17 00:00:00 2001 From: Thomas von Dein Date: Fri, 1 Mar 2024 18:10:09 +0100 Subject: [PATCH] added game font rendering using etxt to player hud, fixed current level --- assets/levels/00-deadly-obstacles.lvl | 2 +- assets/levels/02-start.lvl | 2 +- assets/levels/03-own.lvl | 2 +- assets/levels/04-mayhem.lvl | 2 +- assets/levels/05-space.lvl | 2 +- assets/loader-levels.go | 5 +++- game/level_scene.go | 1 + game/nextlevel_scene.go | 2 +- game/select_scene.go | 2 +- systems/hud_system.go | 38 ++++++++++++++++++++------- 10 files changed, 41 insertions(+), 17 deletions(-) diff --git a/assets/levels/00-deadly-obstacles.lvl b/assets/levels/00-deadly-obstacles.lvl index 44cdc5f..48de769 100644 --- a/assets/levels/00-deadly-obstacles.lvl +++ b/assets/levels/00-deadly-obstacles.lvl @@ -1,4 +1,4 @@ -Description: test obstacles +Description: open the door MinMoves: 2 Background: background-lila diff --git a/assets/levels/02-start.lvl b/assets/levels/02-start.lvl index 2a0f073..25a86ae 100644 --- a/assets/levels/02-start.lvl +++ b/assets/levels/02-start.lvl @@ -1,4 +1,4 @@ -Description: find the fruit +Description: collect all yellow dots MinMoves: 7 Background: background-lila diff --git a/assets/levels/03-own.lvl b/assets/levels/03-own.lvl index 489b08e..5803282 100644 --- a/assets/levels/03-own.lvl +++ b/assets/levels/03-own.lvl @@ -1,4 +1,4 @@ -Description: win +Description: some enemies can be moved MinMoves: 5 Background: background-lila diff --git a/assets/levels/04-mayhem.lvl b/assets/levels/04-mayhem.lvl index 6d27a36..482ce52 100644 --- a/assets/levels/04-mayhem.lvl +++ b/assets/levels/04-mayhem.lvl @@ -1,4 +1,4 @@ -Description: use multiple players +Description: the more players the better MinMoves: 4 Background: background-lila diff --git a/assets/levels/05-space.lvl b/assets/levels/05-space.lvl index 2078884..0c3a5b4 100644 --- a/assets/levels/05-space.lvl +++ b/assets/levels/05-space.lvl @@ -1,4 +1,4 @@ -Description: space +Description: don't fall off the world MinMoves: 3 Background: background-lila diff --git a/assets/loader-levels.go b/assets/loader-levels.go index 7e962c1..32aabca 100644 --- a/assets/loader-levels.go +++ b/assets/loader-levels.go @@ -201,6 +201,7 @@ type TileRegistry map[byte]*Tile // Each level data must be 20 chars wide (= 640 px width) and 15 chars // high (=480 px height). type RawLevel struct { + Number int Name string Description string Background *ebiten.Image @@ -249,10 +250,11 @@ func LoadLevels(dir string) []RawLevel { return entries[i].Name() < entries[j].Name() }) - for _, levelfile := range entries { + for idx, levelfile := range entries { if levelfile.Type().IsRegular() && strings.Contains(levelfile.Name(), ".lvl") { path := filepath.Join("assets", dir) level := ParseRawLevel(path, levelfile) + level.Number = idx levels = append(levels, level) @@ -271,6 +273,7 @@ func ParseRawLevel(dir string, levelfile fs.DirEntry) RawLevel { defer fd.Close() name := strings.TrimSuffix(levelfile.Name(), ".lvl") + name = name[3:] des := "" background := &ebiten.Image{} data := []byte{} diff --git a/game/level_scene.go b/game/level_scene.go index f3e0dee..106eed0 100644 --- a/game/level_scene.go +++ b/game/level_scene.go @@ -29,6 +29,7 @@ func NewLevelScene(game *Game, startlevel int) Scene { func (scene *LevelScene) GenerateLevels(game *Game) { min := []int{} for _, level := range assets.Levels { + level := level scene.Levels = append(scene.Levels, NewLevel(game, 32, &level)) min = append(min, level.MinMoves) } diff --git a/game/nextlevel_scene.go b/game/nextlevel_scene.go index db3d279..66617e9 100644 --- a/game/nextlevel_scene.go +++ b/game/nextlevel_scene.go @@ -91,7 +91,7 @@ func (scene *NextlevelScene) SetupUILast() { rowContainer := gameui.NewRowContainer(false) label1text := "Last level, congratulations!" - label2text := fmt.Sprintf("Your final score: %d", observer.GetLevelScore()) + label2text := fmt.Sprintf("Your final score: %d", observer.GetScore()) buttonMenu := gameui.NewMenuButton("Menu", *assets.FontRenderer.FontNormal, func(args *widget.ButtonClickedEventArgs) { diff --git a/game/select_scene.go b/game/select_scene.go index 5990ab2..4327575 100644 --- a/game/select_scene.go +++ b/game/select_scene.go @@ -134,7 +134,7 @@ func (scene *SelectScene) SetupUI() { }), // This required function returns the string displayed in the list widget.ListOpts.EntryLabelFunc(func(e interface{}) string { - return e.(LevelEntry).Name + return fmt.Sprintf("%02d %s", e.(LevelEntry).Id, e.(LevelEntry).Name) }), // Padding for each entry widget.ListOpts.EntryTextPadding(widget.NewInsetsSimple(5)), diff --git a/systems/hud_system.go b/systems/hud_system.go index 8585ac1..64c9727 100644 --- a/systems/hud_system.go +++ b/systems/hud_system.go @@ -2,11 +2,11 @@ package systems import ( "fmt" + "image/color" "openquell/assets" "openquell/observers" "github.com/hajimehoshi/ebiten/v2" - "github.com/hajimehoshi/ebiten/v2/ebitenutil" "github.com/mlange-42/arche/ecs" ) @@ -34,13 +34,33 @@ func (system *HudSystem) Update() error { 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) + /* + 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) + */ - ebitenutil.DebugPrintAt(screen, fmt.Sprintf("Score: %d", system.Observer.GetScore()), 10, 455) + score := fmt.Sprintf("Score: %d", system.Observer.GetScore()) + level := fmt.Sprintf("Level %d %s", system.Plan.Number, system.Plan.Name) + + assets.FontRenderer.Renderer.SetSizePx(20) + assets.FontRenderer.Renderer.SetTarget(screen) + + system.Print(score, 515, 22) + system.Print(system.Plan.Description, 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) }