added game font rendering using etxt to player hud, fixed current level
This commit is contained in:
parent
ae8058e052
commit
a2ed7782b2
@ -1,4 +1,4 @@
|
|||||||
Description: test obstacles
|
Description: open the door
|
||||||
MinMoves: 2
|
MinMoves: 2
|
||||||
Background: background-lila
|
Background: background-lila
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
Description: find the fruit
|
Description: collect all yellow dots
|
||||||
MinMoves: 7
|
MinMoves: 7
|
||||||
Background: background-lila
|
Background: background-lila
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
Description: win
|
Description: some enemies can be moved
|
||||||
MinMoves: 5
|
MinMoves: 5
|
||||||
Background: background-lila
|
Background: background-lila
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
Description: use multiple players
|
Description: the more players the better
|
||||||
MinMoves: 4
|
MinMoves: 4
|
||||||
Background: background-lila
|
Background: background-lila
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
Description: space
|
Description: don't fall off the world
|
||||||
MinMoves: 3
|
MinMoves: 3
|
||||||
Background: background-lila
|
Background: background-lila
|
||||||
|
|
||||||
|
|||||||
@ -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{}
|
||||||
|
|||||||
@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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)),
|
||||||
|
|||||||
@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user