-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.go
101 lines (85 loc) · 2.46 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package main
import (
"log"
"github.com/hajimehoshi/ebiten/v2"
"github.com/prizelobby/reverset-raiders/core"
"github.com/prizelobby/reverset-raiders/res"
"github.com/prizelobby/reverset-raiders/scene"
"github.com/prizelobby/reverset-raiders/ui"
"github.com/tinne26/etxt"
)
type GameState int
const (
MENU GameState = iota
PLAYING
CREDITS
)
type EbitenGame struct {
ScaledScreen *ui.ScaledScreen
gameState GameState
MenuScene *scene.MenuScene
CreditsScene *scene.CreditsScene
GameScene *scene.GameScene
}
func (g *EbitenGame) SetGameState(s string) {
if s == "credits" {
g.gameState = CREDITS
} else if s == "menu" {
g.gameState = MENU
} else if s == "playing" {
game := core.NewGame()
g.GameScene = scene.NewGameScene(game, g.SetGameState)
g.gameState = PLAYING
}
}
func (g *EbitenGame) Update() error {
if g.gameState == MENU {
g.MenuScene.Update()
} else if g.gameState == CREDITS {
g.CreditsScene.Update()
} else if g.gameState == PLAYING {
g.GameScene.Update()
}
return nil
}
func (g *EbitenGame) Draw(screen *ebiten.Image) {
g.ScaledScreen.SetTarget(screen)
//msg := fmt.Sprintf("TPS: %0.2f\nFPS: %0.2f", ebiten.ActualTPS(), ebiten.ActualFPS())
//g.ScaledScreen.DebugPrint(msg)
if g.gameState == MENU {
g.MenuScene.Draw(g.ScaledScreen)
} else if g.gameState == CREDITS {
g.CreditsScene.Draw(g.ScaledScreen)
} else if g.gameState == PLAYING {
g.GameScene.Draw(g.ScaledScreen)
}
}
func (g *EbitenGame) Layout(outsideWidth, outsideHeight int) (screenWidth, screenHeight int) {
panic("use Ebitengine >=v2.5.0")
}
func (g *EbitenGame) LayoutF(outsideWidth, outsideHeight float64) (screenWidth, screenHeight float64) {
scale := ebiten.DeviceScaleFactor()
canvasWidth := 960 * scale
canvasHeight := 480 * scale
return canvasWidth, canvasHeight
}
func main() {
// create a new text renderer and configure it
txtRenderer := etxt.NewStdRenderer()
glyphsCache := etxt.NewDefaultCache(10 * 1024 * 1024) // 10MB
txtRenderer.SetCacheHandler(glyphsCache.NewHandler())
txtRenderer.SetFont(res.GetFont("Roboto-Medium"))
txtRenderer.SetAlign(etxt.YCenter, etxt.XCenter)
txtRenderer.SetSizePx(64)
scaledScreen := ui.NewScaledScreen(txtRenderer)
g := &EbitenGame{
ScaledScreen: scaledScreen,
}
g.MenuScene = scene.NewMenuScene(g.SetGameState)
g.CreditsScene = scene.NewCreditsScene(g.SetGameState)
ebiten.SetWindowSize(960, 480)
ebiten.SetWindowTitle("Hello, World!")
if err := ebiten.RunGame(g); err != nil {
log.Fatal(err)
}
}