use crate::{
scene::{Scene, frame::Frame},
window::App,
};
pub trait Game {
fn init(&mut self);
fn get_scene_for_rendering(&mut self) -> &Scene;
fn get_scene_mut_for_rendering(&mut self) -> &mut Scene;
fn update<'a>(&mut self, frame: &'a Frame<'a>);
}
pub fn start_engine<G: Game>(game: G) -> anyhow::Result<()> {
use anyhow::Context;
let event_loop = winit::event_loop::EventLoop::new().context("failed: create event loop")?;
event_loop.set_control_flow(winit::event_loop::ControlFlow::Poll);
event_loop
.run_app(&mut App::new(game))
.context("failed: run app")?;
Ok(())
}