added game font rendering using etxt to player hud, fixed current level

This commit is contained in:
Thomas von Dein 2024-03-01 18:10:09 +01:00
parent ae8058e052
commit a2ed7782b2
10 changed files with 41 additions and 17 deletions

View File

@ -1,4 +1,4 @@
Description: test obstacles Description: open the door
MinMoves: 2 MinMoves: 2
Background: background-lila Background: background-lila

View File

@ -1,4 +1,4 @@
Description: find the fruit Description: collect all yellow dots
MinMoves: 7 MinMoves: 7
Background: background-lila Background: background-lila

View File

@ -1,4 +1,4 @@
Description: win Description: some enemies can be moved
MinMoves: 5 MinMoves: 5
Background: background-lila Background: background-lila

View File

@ -1,4 +1,4 @@
Description: use multiple players Description: the more players the better
MinMoves: 4 MinMoves: 4
Background: background-lila Background: background-lila

View File

@ -1,4 +1,4 @@
Description: space Description: don't fall off the world
MinMoves: 3 MinMoves: 3
Background: background-lila Background: background-lila

View File

@ -201,6 +201,7 @@ type TileRegistry map[byte]*Tile
// Each level data must be 20 chars wide (= 640 px width) and 15 chars // Each level data must be 20 chars wide (= 640 px width) and 15 chars
// high (=480 px height). // high (=480 px height).
type RawLevel struct { type RawLevel struct {
Number int
Name string Name string
Description string Description string
Background *ebiten.Image Background *ebiten.Image
@ -249,10 +250,11 @@ func LoadLevels(dir string) []RawLevel {
return entries[i].Name() < entries[j].Name() 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") { if levelfile.Type().IsRegular() && strings.Contains(levelfile.Name(), ".lvl") {
path := filepath.Join("assets", dir) path := filepath.Join("assets", dir)
level := ParseRawLevel(path, levelfile) level := ParseRawLevel(path, levelfile)
level.Number = idx
levels = append(levels, level) levels = append(levels, level)
@ -271,6 +273,7 @@ func ParseRawLevel(dir string, levelfile fs.DirEntry) RawLevel {
defer fd.Close() defer fd.Close()
name := strings.TrimSuffix(levelfile.Name(), ".lvl") name := strings.TrimSuffix(levelfile.Name(), ".lvl")
name = name[3:]
des := "" des := ""
background := &ebiten.Image{} background := &ebiten.Image{}
data := []byte{} data := []byte{}

View File

@ -29,6 +29,7 @@ func NewLevelScene(game *Game, startlevel int) Scene {
func (scene *LevelScene) GenerateLevels(game *Game) { func (scene *LevelScene) GenerateLevels(game *Game) {
min := []int{} min := []int{}
for _, level := range assets.Levels { for _, level := range assets.Levels {
level := level
scene.Levels = append(scene.Levels, NewLevel(game, 32, &level)) scene.Levels = append(scene.Levels, NewLevel(game, 32, &level))
min = append(min, level.MinMoves) min = append(min, level.MinMoves)
} }

View File

@ -91,7 +91,7 @@ func (scene *NextlevelScene) SetupUILast() {
rowContainer := gameui.NewRowContainer(false) rowContainer := gameui.NewRowContainer(false)
label1text := "Last level, congratulations!" 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, buttonMenu := gameui.NewMenuButton("Menu", *assets.FontRenderer.FontNormal,
func(args *widget.ButtonClickedEventArgs) { func(args *widget.ButtonClickedEventArgs) {

View File

@ -134,7 +134,7 @@ func (scene *SelectScene) SetupUI() {
}), }),
// This required function returns the string displayed in the list // This required function returns the string displayed in the list
widget.ListOpts.EntryLabelFunc(func(e interface{}) string { 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 // Padding for each entry
widget.ListOpts.EntryTextPadding(widget.NewInsetsSimple(5)), widget.ListOpts.EntryTextPadding(widget.NewInsetsSimple(5)),

View File

@ -2,11 +2,11 @@ package systems
import ( import (
"fmt" "fmt"
"image/color"
"openquell/assets" "openquell/assets"
"openquell/observers" "openquell/observers"
"github.com/hajimehoshi/ebiten/v2" "github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/ebitenutil"
"github.com/mlange-42/arche/ecs" "github.com/mlange-42/arche/ecs"
) )
@ -34,13 +34,33 @@ func (system *HudSystem) Update() error {
func (system *HudSystem) Draw(screen *ebiten.Image) { func (system *HudSystem) Draw(screen *ebiten.Image) {
op := &ebiten.DrawImageOptions{} op := &ebiten.DrawImageOptions{}
screen.DrawImage(assets.Assets["hud"], op) screen.DrawImage(assets.Assets["hud"], op)
ebitenutil.DebugPrintAt(screen, fmt.Sprintf( /*
"FPS: %02.f TPS: %02.f Level %s: %s", ebitenutil.DebugPrintAt(screen, fmt.Sprintf(
ebiten.ActualFPS(), "FPS: %02.f TPS: %02.f Level %s: %s",
ebiten.ActualTPS(), ebiten.ActualFPS(),
system.Plan.Name, ebiten.ActualTPS(),
system.Plan.Description, system.Plan.Name,
), 10, 10) 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)
} }