mirror of
https://github.com/bloeys/nmage.git
synced 2025-12-29 13:28:20 +00:00
Complete engine game loop+abstract imgui
This commit is contained in:
53
engine/game.go
Executable file
53
engine/game.go
Executable file
@ -0,0 +1,53 @@
|
||||
package engine
|
||||
|
||||
import (
|
||||
"github.com/bloeys/nmage/timing"
|
||||
nmageimgui "github.com/bloeys/nmage/ui/imgui"
|
||||
"github.com/go-gl/gl/v4.1-core/gl"
|
||||
)
|
||||
|
||||
type Game interface {
|
||||
Init()
|
||||
|
||||
FrameStart()
|
||||
Update()
|
||||
Render()
|
||||
FrameEnd()
|
||||
ShouldRun() bool
|
||||
|
||||
GetWindow() *Window
|
||||
GetImGUI() nmageimgui.ImguiInfo
|
||||
|
||||
Deinit()
|
||||
}
|
||||
|
||||
func Run(g Game) {
|
||||
|
||||
g.Init()
|
||||
|
||||
w := g.GetWindow()
|
||||
ui := g.GetImGUI()
|
||||
for g.ShouldRun() {
|
||||
|
||||
width, height := w.SDLWin.GetSize()
|
||||
fbWidth, fbHeight := w.SDLWin.GLGetDrawableSize()
|
||||
|
||||
timing.FrameStarted()
|
||||
w.handleInputs()
|
||||
ui.FrameStart(float32(width), float32(height))
|
||||
|
||||
g.FrameStart()
|
||||
|
||||
g.Update()
|
||||
|
||||
gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)
|
||||
g.Render()
|
||||
ui.Render(float32(width), float32(height), fbWidth, fbHeight)
|
||||
w.SDLWin.GLSwap()
|
||||
|
||||
g.FrameEnd()
|
||||
timing.FrameEnded()
|
||||
}
|
||||
|
||||
g.Deinit()
|
||||
}
|
||||
Reference in New Issue
Block a user