openquell/game/scene.go
2024-02-06 15:26:20 +01:00

52 lines
1.2 KiB
Go

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)
}