commandeuropa/game/game.go

57 lines
1.1 KiB
Go

package game
import (
"log"
"os"
"code.rocketnine.space/tslocum/commandeuropa/component"
"code.rocketnine.space/tslocum/commandeuropa/system"
"code.rocketnine.space/tslocum/commandeuropa/world"
"code.rocketnine.space/tslocum/gohan"
"github.com/hajimehoshi/ebiten/v2"
)
type Game struct{}
func NewGame() (*Game, error) {
g := &Game{}
gohan.AddSystem(&system.RenderEnvironment{})
gohan.AddSystem(&system.RenderDebug{})
// Create singleton entity for systems that run one time each tick.
once := gohan.NewEntity()
once.AddComponent(&component.Once{})
return g, nil
}
func (g *Game) Layout(outsideWidth, outsideHeight int) (screenWidth, screenHeight int) {
// Handle window resize.
if outsideWidth != world.ScreenWidth || outsideHeight != world.ScreenHeight {
world.ScreenWidth, world.ScreenHeight = outsideWidth, outsideHeight
}
return outsideWidth, outsideHeight
}
func (g *Game) Update() error {
if ebiten.IsWindowBeingClosed() {
g.Exit()
return nil
}
return gohan.Update()
}
func (g *Game) Draw(screen *ebiten.Image) {
err := gohan.Draw(screen)
if err != nil {
log.Fatal(err)
}
}
func (g *Game) Exit() {
os.Exit(0)
}