diff --git a/assets/levels/00-deadly-obstacles.lvl b/assets/levels/00-deadly-obstacles.lvl new file mode 100644 index 0000000..07e6280 --- /dev/null +++ b/assets/levels/00-deadly-obstacles.lvl @@ -0,0 +1,17 @@ +Description: test obstacles +Background: background-lila + + + + ####### + # v # + # # + #> S <# + # # + # ^ # + ####### + + + + + diff --git a/assets/levels/01-friendly-obstacles.lvl b/assets/levels/01-friendly-obstacles.lvl new file mode 100644 index 0000000..2db6d91 --- /dev/null +++ b/assets/levels/01-friendly-obstacles.lvl @@ -0,0 +1,17 @@ +Description: test obstacles +Background: background-lila + + + + ####### + # ^ # + # # + #< S ># + # # + #^ v# + ####### + + + + + diff --git a/assets/levels/1-start.lvl b/assets/levels/02-start.lvl similarity index 100% rename from assets/levels/1-start.lvl rename to assets/levels/02-start.lvl diff --git a/assets/levels/0-own.lvl b/assets/levels/03-own.lvl similarity index 100% rename from assets/levels/0-own.lvl rename to assets/levels/03-own.lvl diff --git a/assets/loader-levels.go b/assets/loader-levels.go index 2d5d1ce..d02b5cc 100644 --- a/assets/loader-levels.go +++ b/assets/loader-levels.go @@ -128,8 +128,8 @@ func InitTiles() TileRegistry { '+': NewTileObstacle("obstacle-star", config.All), '^': NewTileObstacle("obstacle-north", config.North), 'v': NewTileObstacle("obstacle-south", config.South), - '<': NewTileObstacle("obstacle-east", config.East), - '>': NewTileObstacle("obstacle-west", config.West), + '<': NewTileObstacle("obstacle-west", config.West), + '>': NewTileObstacle("obstacle-east", config.East), '*': NewTileParticle([]string{ //"particle-ring-1", "particle-ring-2", diff --git a/components/position.go b/components/position.go index b968c4e..5766b26 100644 --- a/components/position.go +++ b/components/position.go @@ -72,9 +72,9 @@ func (position *Position) String() string { } func (position *Position) Move(velocity *Velocity, speed *Speed) { - if velocity.Direction != 0 { - slog.Debug("moving", "velocity", velocity, "speed", speed) - } + // if velocity.Direction != 0 { + // slog.Debug("moving", "velocity", velocity, "speed", speed) + // } position.Update( position.X+(velocity.Data.X*speed.Value), position.Y+(velocity.Data.Y*speed.Value), diff --git a/game/about_scene.go b/game/about_scene.go index c2b0909..9a7c7a7 100644 --- a/game/about_scene.go +++ b/game/about_scene.go @@ -50,6 +50,8 @@ func (scene *AboutScene) ResetNext() { scene.Next = scene.Whoami } +func (scene *AboutScene) SetLevel(level int) {} + func (scene *AboutScene) Clearscreen() bool { return true } diff --git a/game/game.go b/game/game.go index 85eeac0..ffe2248 100644 --- a/game/game.go +++ b/game/game.go @@ -39,7 +39,7 @@ func NewGame(width, height, cellsize, startlevel int, startscene SceneName) *Gam game.Scenes[Menu] = NewMenuScene(game) game.Scenes[About] = NewAboutScene(game) game.Scenes[Popup] = NewPopupScene(game) - //game.Scenes[Play] = NewLevelScene(game, startlevel) + game.Scenes[Play] = NewLevelScene(game, startlevel) game.Scenes[Select] = NewSelectScene(game) game.CurrentScene = startscene @@ -94,7 +94,8 @@ func (game *Game) Update() error { if next == Play { // fresh setup of actual level every time we enter the play scene - game.Scenes[Play] = NewLevelScene(game, gameobserver.CurrentLevel) + //game.Scenes[Play] = NewLevelScene(game, gameobserver.CurrentLevel) + game.Scenes[Play].SetLevel(gameobserver.CurrentLevel) } // make sure we stay on the selected scene diff --git a/game/level_scene.go b/game/level_scene.go index 8d4747e..e550fdb 100644 --- a/game/level_scene.go +++ b/game/level_scene.go @@ -18,10 +18,10 @@ type LevelScene struct { // Implements the actual playing Scene func NewLevelScene(game *Game, startlevel int) Scene { - scene := &LevelScene{CurrentLevel: startlevel, Whoami: Play, Next: Play, Game: game} + scene := &LevelScene{Whoami: Play, Next: Play, Game: game} scene.GenerateLevels(game) - scene.Levels[scene.CurrentLevel].SetupGrid(game) + scene.SetLevel(startlevel) return scene } @@ -34,6 +34,11 @@ func (scene *LevelScene) GenerateLevels(game *Game) { scene.Game.Levels = scene.Levels } +func (scene *LevelScene) SetLevel(level int) { + scene.CurrentLevel = level + scene.Levels[scene.CurrentLevel].SetupGrid(scene.Game) +} + // Interface methods func (scene *LevelScene) SetNext(next SceneName) { scene.Next = next @@ -53,7 +58,6 @@ func (scene *LevelScene) Clearscreen() bool { } func (scene *LevelScene) Update() error { - scene.Levels[scene.CurrentLevel].Update() switch { diff --git a/game/menu_scene.go b/game/menu_scene.go index 8f95fd8..5296726 100644 --- a/game/menu_scene.go +++ b/game/menu_scene.go @@ -37,6 +37,8 @@ func (scene *MenuScene) ResetNext() { scene.Next = scene.Whoami } +func (scene *MenuScene) SetLevel(level int) {} + func (scene *MenuScene) SetNext(next SceneName) { slog.Debug("select setnext", "next", next) scene.Next = next diff --git a/game/nextlevel_scene.go b/game/nextlevel_scene.go index 73c0de6..96fb04e 100644 --- a/game/nextlevel_scene.go +++ b/game/nextlevel_scene.go @@ -58,6 +58,8 @@ func (scene *NextlevelScene) Update() error { return nil } +func (scene *NextlevelScene) SetLevel(level int) {} + func (scene *NextlevelScene) Draw(screen *ebiten.Image) { background := assets.Assets["background-popup"] diff --git a/game/popup_scene.go b/game/popup_scene.go index f0476f8..3e20b0c 100644 --- a/game/popup_scene.go +++ b/game/popup_scene.go @@ -41,6 +41,8 @@ func (scene *PopupScene) SetNext(next SceneName) { scene.Next = next } +func (scene *PopupScene) SetLevel(level int) {} + func (scene *PopupScene) Clearscreen() bool { // both level_scene AND the popup must not clear to get an actual popup return false diff --git a/game/scene.go b/game/scene.go index eaa2543..22add3b 100644 --- a/game/scene.go +++ b/game/scene.go @@ -26,6 +26,7 @@ type Scene interface { ResetNext() Clearscreen() bool Update() error + SetLevel(int) Draw(screen *ebiten.Image) } diff --git a/game/select_scene.go b/game/select_scene.go index d2a2b68..5990ab2 100644 --- a/game/select_scene.go +++ b/game/select_scene.go @@ -3,6 +3,7 @@ package game import ( "fmt" "image/color" + "log/slog" "openquell/assets" "openquell/gameui" "openquell/observers" @@ -31,6 +32,8 @@ func NewSelectScene(game *Game) Scene { return scene } +func (scene *SelectScene) SetLevel(level int) {} + func (scene *SelectScene) GetNext() SceneName { return scene.Next } @@ -79,6 +82,7 @@ func (scene *SelectScene) SetupUI() { levels = append(levels, LevelEntry{Id: id, Name: scene.Game.Levels[id].Name}) } + slog.Debug("levels", "levels", levels) buttonImage, err := gameui.LoadButtonImage() if err != nil { panic(err) diff --git a/game/welcome_scene.go b/game/welcome_scene.go index 5d0c4ba..bfd1827 100644 --- a/game/welcome_scene.go +++ b/game/welcome_scene.go @@ -36,6 +36,8 @@ func (scene *WelcomeScene) ResetNext() { scene.Next = scene.Whoami } +func (scene *WelcomeScene) SetLevel(level int) {} + func (scene *WelcomeScene) Clearscreen() bool { return true } diff --git a/systems/obstacle_system.go b/systems/obstacle_system.go index 8ebb615..b045cc4 100644 --- a/systems/obstacle_system.go +++ b/systems/obstacle_system.go @@ -52,7 +52,7 @@ func (system *ObstacleSystem) Update() { playerposition := (*Position)(system.World.Get(player, posID)) playervelocity := (*Velocity)(system.World.Get(player, veloID)) - ok, newpos := playerposition.Intersects(obsposition, playervelocity) + ok, newpos := obsposition.Intersects(playerposition, playervelocity) if ok { slog.Debug("bumped into obstacle", "obstacle", obstacle) diff --git a/systems/player_system.go b/systems/player_system.go index 1e66c8f..f2970ea 100644 --- a/systems/player_system.go +++ b/systems/player_system.go @@ -36,7 +36,7 @@ func (system PlayerSystem) Update() error { query := system.Selector.Query(system.World) for query.Next() { - playerposition, velocity, _, _, speed := query.Get() + playerposition, velocity, _, _, _ := query.Get() if !velocity.Moving() { switch { @@ -71,14 +71,19 @@ func (system PlayerSystem) Update() error { } } } - - playerposition.Move(velocity, speed) } - system.Particle.Update() + system.Particle.Update() // may set player position system.Obstacle.Update() system.Collectible.Update() + query = system.Selector.Query(system.World) + for query.Next() { + // move player after obstacle or collectible updates + playerposition, velocity, _, _, speed := query.Get() + playerposition.Move(velocity, speed) + } + return nil }