Skapat grundprojekt: Huvudmeny och Spel-scen as med hoppmakanik och AABB kollisions-grund
This commit is contained in:
65
internal/game/game.go
Normal file
65
internal/game/game.go
Normal file
@@ -0,0 +1,65 @@
|
||||
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()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user