From b7383f065f494e8aa92c095f7ba60ce87248ac94 Mon Sep 17 00:00:00 2001 From: Thomas von Dein Date: Tue, 16 Apr 2024 17:46:53 +0200 Subject: [PATCH] add moving animation support, fix debug printing --- TODO.md | 3 +-- assets/loader-levels.go | 1 + components/position.go | 9 +++++++++ components/renderable.go | 3 +++ grid/grid.go | 14 +++++++++----- systems/player_system.go | 9 +++++++-- util/generics.go | 7 +++++++ 7 files changed, 37 insertions(+), 9 deletions(-) diff --git a/TODO.md b/TODO.md index 96dd615..ed27b54 100644 --- a/TODO.md +++ b/TODO.md @@ -15,11 +15,10 @@ - Add player collision animation - Create pixel art ui elements (button, list things) and ui borders/backgrounds + Replace HUD with pixel art variant - Modify font and font color matching the palette -- Replace HUD with pixel art variant - - On game start respond to any key (ebitengine-input has an anykey func) - Switch to use https://github.com/quasilyte/ebitengine-input diff --git a/assets/loader-levels.go b/assets/loader-levels.go index 0fb9f76..eb364df 100644 --- a/assets/loader-levels.go +++ b/assets/loader-levels.go @@ -18,6 +18,7 @@ type TileAnimation struct { OnCollision bool // wether to animate a collision OnDestruction bool // wether to animate destruction OnIdle bool // wether to animate during idling + OnMoving bool // wether to animate during moving CollisionSheet AnimationSet // an entry in assets.Animations[name] DestructionSheet AnimationSet diff --git a/components/position.go b/components/position.go index 8abef8e..5b17009 100644 --- a/components/position.go +++ b/components/position.go @@ -71,6 +71,15 @@ func (position *Position) String() string { ) } +func (position *Position) SmallString() string { + return fmt.Sprintf("%d,%d\n%d,%d", + position.X/32, + position.Y/32, + position.X, + position.Y, + ) +} + func (position *Position) Move(velocity *Velocity) { // if velocity.Direction != 0 { // slog.Debug("moving", "velocity", velocity, "speed", speed) diff --git a/components/renderable.go b/components/renderable.go index f7d1a34..06a0c10 100644 --- a/components/renderable.go +++ b/components/renderable.go @@ -35,6 +35,7 @@ type Renderable struct { DestructionAnimate Animation IdleAnimate Animation CollisionAnimate Animation + MovingAnimate Animation Hidden bool } @@ -51,6 +52,8 @@ func (render *Renderable) StartAnimation(which int) { render.IdleAnimate.Active = true render.IdleAnimate.Loop = true render.IdleAnimate.Timer.Start(0) + case Moving: + render.MovingAnimate.Loop = true } } diff --git a/grid/grid.go b/grid/grid.go index 9799f2c..6b03b98 100644 --- a/grid/grid.go +++ b/grid/grid.go @@ -159,24 +159,28 @@ func NewGrid(world *ecs.World, render.Image = tile.Sprite render.Pos = pos - if tile.Animation.OnCollision { + switch { + case tile.Animation.OnCollision: render.CollisionAnimate.Sprites = tile.Animation.CollisionSheet.Sprites render.CollisionAnimate.Width = tile.Animation.CollisionSheet.Width render.CollisionAnimate.Height = tile.Animation.CollisionSheet.Height - } - if tile.Animation.OnDestruction { + case tile.Animation.OnDestruction: render.DestructionAnimate.Sprites = tile.Animation.DestructionSheet.Sprites render.DestructionAnimate.Width = tile.Animation.DestructionSheet.Width render.DestructionAnimate.Height = tile.Animation.DestructionSheet.Height - } - if tile.Animation.OnIdle { + case tile.Animation.OnIdle: render.IdleAnimate.Sprites = tile.Animation.IdleSheet.Sprites render.IdleAnimate.Width = tile.Animation.IdleSheet.Width render.IdleAnimate.Height = tile.Animation.IdleSheet.Height render.StartAnimation(components.Idle) render.Hidden = true // we do NOT render the sprite, but the idle animation instead + + case tile.Animation.OnMoving: + render.MovingAnimate.Sprites = tile.Animation.IdleSheet.Sprites + render.MovingAnimate.Width = tile.Animation.IdleSheet.Width + render.MovingAnimate.Height = tile.Animation.IdleSheet.Height } default: diff --git a/systems/player_system.go b/systems/player_system.go index 6264fd5..d4ed6d0 100644 --- a/systems/player_system.go +++ b/systems/player_system.go @@ -8,6 +8,7 @@ import ( . "openquell/config" "openquell/grid" "openquell/observers" + "openquell/util" "github.com/hajimehoshi/ebiten/v2" "github.com/hajimehoshi/ebiten/v2/ebitenutil" @@ -136,7 +137,9 @@ func (system *PlayerSystem) Draw(screen *ebiten.Image) { screen.DrawImage(sprite.Image, op) - ebitenutil.DebugPrintAt(screen, pos.String(), pos.X, pos.Y) // print player pos + if util.DebugEnabled() { + ebitenutil.DebugPrintAt(screen, pos.SmallString(), pos.X, pos.Y+16) // print player pos + } } } @@ -210,7 +213,9 @@ func (system *PlayerSystem) CheckMovement( observer.AddMove() } } else { - fmt.Println("------------------------") + if util.DebugEnabled() { + fmt.Println("------------------------") + } slog.Debug("(1) player is at", "current", position.String()) } } diff --git a/util/generics.go b/util/generics.go index c51ac71..671baed 100644 --- a/util/generics.go +++ b/util/generics.go @@ -1,7 +1,10 @@ package util import ( + "context" . "openquell/config" + + "log/slog" ) // find an item in a list, generic variant @@ -41,3 +44,7 @@ func DirectionStr(dir int) string { return str } + +func DebugEnabled() bool { + return slog.Default().Enabled(context.TODO(), slog.LevelDebug) +}