fixed observers, added GameObserver
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user