52 lines
1.2 KiB
Go
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)
|
||
|
|
}
|