package game import ( "fmt" "image" "openquell/observers" "github.com/hajimehoshi/ebiten/v2" "github.com/mlange-42/arche/ecs" ) type Game struct { World *ecs.World Bounds image.Rectangle ScreenWidth, ScreenHeight int Scenes map[int]Scene Observer *observers.GameObserver } func NewGame(width, height, cellsize, startlevel int, startscene int) *Game { world := ecs.NewWorld() game := &Game{ Bounds: image.Rectangle{}, World: &world, ScreenWidth: width, ScreenHeight: height, Scenes: map[int]Scene{}, } observers.NewPlayerObserver(&world) observers.NewParticleObserver(&world) game.Observer = observers.NewGameObserver(&world, startlevel, width, height, cellsize) game.Scenes[Play] = NewLevelScene(game, startlevel) fmt.Println(game.World.Stats().String()) return game } func (game *Game) Update() error { for _, scene := range game.Scenes { scene.Update() } return nil } func (game *Game) Draw(screen *ebiten.Image) { for _, scene := range game.Scenes { scene.Draw(screen) } } func (g *Game) Layout(newWidth, newHeight int) (int, int) { return g.ScreenWidth, g.ScreenHeight }