From c24c00592fb731fe29d7dad1741efe5e93bff1c6 Mon Sep 17 00:00:00 2001 From: Shanti Chellaram Date: Sun, 16 Mar 2025 18:45:28 +0900 Subject: [PATCH] Split lib into multiple files --- lib/event.go | 1 + lib/{lib.go => game.go} | 46 +------------------------------------ lib/scene.go | 51 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 45 deletions(-) create mode 100644 lib/event.go rename lib/{lib.go => game.go} (55%) create mode 100644 lib/scene.go diff --git a/lib/event.go b/lib/event.go new file mode 100644 index 0000000..55c21f8 --- /dev/null +++ b/lib/event.go @@ -0,0 +1 @@ +package lib diff --git a/lib/lib.go b/lib/game.go similarity index 55% rename from lib/lib.go rename to lib/game.go index 12391be..e2fe302 100644 --- a/lib/lib.go +++ b/lib/game.go @@ -2,59 +2,15 @@ package lib import ( "github.com/hajimehoshi/ebiten/v2" - "github.com/hajimehoshi/ebiten/v2/ebitenutil" "github.com/hajimehoshi/ebiten/v2/inpututil" ) -// Scenes: Main Menu -// Game Mode - -//Scene - is the highest-level element of state the game can be in. - -type GameEvent struct { - Type int -} - -type HandleResult int - -const ( - EventNoOp int = iota - EventKeyRelease -) - -const ( - DoNothing HandleResult = iota - EndProgram -) - -type Scene interface { - HandleEvent(*GameEvent) HandleResult - Draw(screen *ebiten.Image) -} - // Implements ebiten.Game +// The game has type TetrisGame struct { activeScene Scene } -type MainMenuScene struct { - selections [1]string - currentSelectionIndex int -} - -func (menu *MainMenuScene) HandleEvent(e *GameEvent) HandleResult { - if e.Type == 1 { - if menu.selections[menu.currentSelectionIndex] == "Quit" { - return EndProgram - } - } - return DoNothing -} - -func (menu *MainMenuScene) Draw(screen *ebiten.Image) { - ebitenutil.DebugPrint(screen, menu.selections[menu.currentSelectionIndex]) -} - func NewGame() (*TetrisGame, error) { return &TetrisGame{ activeScene: &MainMenuScene{ diff --git a/lib/scene.go b/lib/scene.go new file mode 100644 index 0000000..c289416 --- /dev/null +++ b/lib/scene.go @@ -0,0 +1,51 @@ +package lib + +import ( + "github.com/hajimehoshi/ebiten/v2" + "github.com/hajimehoshi/ebiten/v2/ebitenutil" +) + +// Scenes: Main Menu +// Game Mode + +type GameEvent struct { + Type int +} + +type HandleResult int + +const ( + EventNoOp int = iota + EventKeyRelease +) + +const ( + DoNothing HandleResult = iota + EndProgram +) + +// Scene is the highest level organization unit of a Game. It handles events. +// A game has a currently active scene, and can transition +type Scene interface { + // Handles a game event and returns a result. + HandleEvent(*GameEvent) HandleResult + Draw(screen *ebiten.Image) +} + +type MainMenuScene struct { + selections [1]string + currentSelectionIndex int +} + +func (menu *MainMenuScene) HandleEvent(e *GameEvent) HandleResult { + if e.Type == 1 { + if menu.selections[menu.currentSelectionIndex] == "Quit" { + return EndProgram + } + } + return DoNothing +} + +func (menu *MainMenuScene) Draw(screen *ebiten.Image) { + ebitenutil.DebugPrint(screen, menu.selections[menu.currentSelectionIndex]) +}