package game import ( "fmt" "openquell/assets" "github.com/hajimehoshi/ebiten/v2" ) // Wrapper for different screens to be shown, as Welcome, Options, // About, Select Level and of course the actual Levels. // Scenes are responsible for screen clearing! That way a scene is able // to render its content onto the running level, e.g. the options scene // etc. type Scene interface { Update() error Draw(screen *ebiten.Image) } type LevelScene struct { Game *Game CurrentLevel int Levels []*Level } // Implements the actual playing Scene func NewLevelScene(game *Game, startlevel int) Scene { scene := &LevelScene{Game: game, CurrentLevel: startlevel} scene.GenerateLevels() scene.Levels[game.CurrentLevel].SetupGrid(game) fmt.Println(game.World.Stats().String()) return scene } func (scene *LevelScene) GenerateLevels() { for _, level := range assets.Levels { scene.Levels = append(scene.Levels, NewLevel(scene.Game, 32, &level)) } } func (scene *LevelScene) Update() error { scene.Levels[scene.CurrentLevel].Update() return nil } func (scene *LevelScene) Draw(screen *ebiten.Image) { screen.Clear() scene.Levels[scene.CurrentLevel].Draw(screen) }