try write game engine

This commit is contained in:
Dmitriy Dergachev 2026-02-09 19:17:30 +03:00
parent a101afcd15
commit f990b270f9
2 changed files with 67 additions and 0 deletions

59
pkg/engine/engine.go Normal file
View 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
View File

@ -0,0 +1,8 @@
package engine
type Game interface {
Init() error
Update(deltaTime float32)
Draw(renderer *Renderer)
OnResize(width, height int)
}