package blocks import ( "github.com/hajimehoshi/ebiten/graphics" "github.com/hajimehoshi/ebiten/ui" _ "image/png" ) type Size struct { Width int Height int } // TODO: Should they be global?? var texturePaths = map[string]string{} var renderTargetSizes = map[string]Size{} const ScreenWidth = 256 const ScreenHeight = 240 type GameState struct { SceneManager *SceneManager Input *Input } type Textures interface { RequestTexture(name string, path string) RequestRenderTarget(name string, size Size) Has(name string) bool GetTexture(name string) graphics.TextureId GetRenderTarget(name string) graphics.RenderTargetId } type Game struct { sceneManager *SceneManager input *Input textures Textures } func NewGame(textures Textures) *Game { game := &Game{ sceneManager: NewSceneManager(NewTitleScene()), input: NewInput(), textures: textures, } for name, path := range texturePaths { game.textures.RequestTexture(name, path) } for name, size := range renderTargetSizes { game.textures.RequestRenderTarget(name, size) } return game } func (game *Game) isInitialized() bool { for name, _ := range texturePaths { if !game.textures.Has(name) { return false } } for name, _ := range renderTargetSizes { if !game.textures.Has(name) { return false } } return true } func (game *Game) Update(state ui.InputState) { if !game.isInitialized() { return } game.input.Update(state.PressedKeys()) game.sceneManager.Update(&GameState{ SceneManager: game.sceneManager, Input: game.input, }) } func (game *Game) Draw(context graphics.Context) { if !game.isInitialized() { return } game.sceneManager.Draw(context, game.textures) }