fixed observers, added GameObserver

This commit is contained in:
2024-02-11 14:24:30 +01:00
parent 72f0aa7691
commit 65ddec3fa4
18 changed files with 122 additions and 53 deletions

View File

@@ -13,16 +13,15 @@ type Game struct {
World *ecs.World
Bounds image.Rectangle
ScreenWidth, ScreenHeight int
CurrentLevel int
Scenes map[int]Scene
Observer *observers.GameObserver
}
func NewGame(width, height, startlevel int, startscene int) *Game {
func NewGame(width, height, cellsize, startlevel int, startscene int) *Game {
world := ecs.NewWorld()
game := &Game{
Bounds: image.Rectangle{},
CurrentLevel: startlevel,
World: &world,
ScreenWidth: width,
ScreenHeight: height,
@@ -31,6 +30,7 @@ func NewGame(width, height, startlevel int, startscene int) *Game {
observers.NewPlayerObserver(&world)
observers.NewParticleObserver(&world)
game.Observer = observers.NewGameObserver(&world, startlevel, width, height, cellsize)
game.Scenes[Play] = NewLevelScene(game, startlevel)

View File

@@ -6,6 +6,7 @@ import (
"openquell/assets"
"openquell/components"
"openquell/grid"
"openquell/observers"
"openquell/systems"
"strings"
@@ -71,6 +72,10 @@ func (level *Level) SetupGrid(game *Game) {
selector := ecs.All(posID)
level.World.Batch().RemoveEntities(selector)
// get rid of any players on PlayerObserver. FIXME: remove them in grid.NewGrid()?
playerobserver := observers.GetPlayerObserver(level.World)
playerobserver.RemoveEntities()
// setup world
level.GridSystem.SetGrid(grid.NewGrid(game.World, level.Cellsize, level.Width, level.Height, level.Mapslice))
}

View File

@@ -1,12 +1,14 @@
package game
import (
"fmt"
"openquell/assets"
"github.com/hajimehoshi/ebiten/v2"
)
type LevelScene struct {
Game *Game
CurrentLevel int
Levels []*Level
Next int
@@ -16,10 +18,10 @@ type LevelScene struct {
// Implements the actual playing Scene
func NewLevelScene(game *Game, startlevel int) Scene {
scene := &LevelScene{CurrentLevel: startlevel, Whoami: Play}
scene := &LevelScene{CurrentLevel: startlevel, Whoami: Play, Game: game}
scene.GenerateLevels(game)
scene.Levels[game.CurrentLevel].SetupGrid(game)
scene.Levels[scene.CurrentLevel].SetupGrid(game)
return scene
}
@@ -40,6 +42,12 @@ func (scene *LevelScene) SetNext() int {
}
func (scene *LevelScene) Update() error {
if scene.CurrentLevel != scene.Game.Observer.CurrentLevel {
fmt.Printf("current: %d, next: %d\n", scene.CurrentLevel, scene.Game.Observer.CurrentLevel)
scene.CurrentLevel = scene.Game.Observer.CurrentLevel
scene.Levels[scene.CurrentLevel].SetupGrid(scene.Game)
}
scene.Levels[scene.CurrentLevel].Update()
return nil
}