try write game engine
This commit is contained in:
parent
a101afcd15
commit
f990b270f9
59
pkg/engine/engine.go
Normal file
59
pkg/engine/engine.go
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
package engine
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
|
type Engine struct {
|
||||||
|
isRunning bool
|
||||||
|
window *Window
|
||||||
|
renderer *Renderer
|
||||||
|
lastTime time.Time
|
||||||
|
game Game
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewEngine(title string, width, height int) *Engine {
|
||||||
|
return &Engine{
|
||||||
|
window: NewWindow(title, width, height),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *Engine) Run(game Game) error {
|
||||||
|
e.game = game
|
||||||
|
|
||||||
|
if err := e.window.Init(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer e.window.Destroy()
|
||||||
|
|
||||||
|
e.renderer = NewRenderer()
|
||||||
|
if err := e.renderer.Init(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := e.game.Init(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
e.isRunning = true
|
||||||
|
e.lastTime = time.Now()
|
||||||
|
|
||||||
|
// Основной игровой цикл
|
||||||
|
for e.isRunning && !e.window.ShouldClose() {
|
||||||
|
// Обработка событий
|
||||||
|
e.window.PollEvents()
|
||||||
|
|
||||||
|
// Расчет времени кадра
|
||||||
|
currentTime := time.Now()
|
||||||
|
deltaTime := currentTime.Sub(e.lastTime).Seconds()
|
||||||
|
e.lastTime = currentTime
|
||||||
|
|
||||||
|
// Обновление игры
|
||||||
|
e.game.Update(float32(deltaTime))
|
||||||
|
|
||||||
|
// Рендеринг
|
||||||
|
e.renderer.Clear()
|
||||||
|
e.game.Draw(e.renderer)
|
||||||
|
|
||||||
|
// Отображение буфера
|
||||||
|
e.SwapBuffers()
|
||||||
|
}
|
||||||
|
}
|
||||||
8
pkg/engine/game.go
Normal file
8
pkg/engine/game.go
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
package engine
|
||||||
|
|
||||||
|
type Game interface {
|
||||||
|
Init() error
|
||||||
|
Update(deltaTime float32)
|
||||||
|
Draw(renderer *Renderer)
|
||||||
|
OnResize(width, height int)
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user