device 0.0.4

A generative engine
use super::*;

#[derive(Default, Parser)]
pub(crate) struct Run {
  #[arg(long)]
  fullscreen: bool,
  #[arg(long)]
  present_mode: Option<PresentMode>,
  #[arg(long)]
  record: bool,
}

impl Run {
  pub(crate) fn run(self, options: Options, config: Config) -> Result {
    let record = self
      .record
      .then(|| options.fps.context(error::RecordRequiresFps))
      .transpose()?;

    let mut app = App::new(config, self.fullscreen, options, self.present_mode, record)?;

    let event_loop = EventLoop::with_user_event()
      .build()
      .context(error::EventLoopBuild)?;

    event_loop.set_control_flow(ControlFlow::Poll);

    event_loop.run_app(&mut app).context(error::AppRun)?;

    app.finish()?;

    Ok(())
  }
}