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() } }