package game import ( "mountain/internal/scenes" "github.com/hajimehoshi/ebiten/v2" ) // SceneType represents the different scenes in the game. type SceneType int const ( SceneMainMenu SceneType = iota ScenePlay ) // Scene interface defines standard methods a state/scene must have. type Scene interface { Update() error Draw(screen *ebiten.Image) } // Game implements ebiten.Game interface. type Game struct { currentScene Scene currentSceneType SceneType } func NewGame() *Game { g := &Game{} g.ChangeScene(SceneMainMenu) return g } func (g *Game) Update() error { // Handle global input for scene switching maybe? if g.currentSceneType == SceneMainMenu && ebiten.IsKeyPressed(ebiten.KeyEnter) { g.ChangeScene(ScenePlay) } if g.currentScene != nil { return g.currentScene.Update() } return nil } func (g *Game) Draw(screen *ebiten.Image) { if g.currentScene != nil { g.currentScene.Draw(screen) } } func (g *Game) Layout(outsideWidth, outsideHeight int) (screenWidth, screenHeight int) { return 800, 600 } func (g *Game) ChangeScene(s SceneType) { g.currentSceneType = s switch s { case SceneMainMenu: g.currentScene = scenes.NewMenuScene() case ScenePlay: g.currentScene = scenes.NewPlayScene() } }