use std::{path::PathBuf, process, thread}; use anyhow::Result; use app::App; use clap::Parser; use emulator::EmulatorBuilder; use winit::event_loop::{ControlFlow, EventLoop}; mod app; mod audio; mod controller; mod emulator; mod renderer; mod shrooms_vb_core; #[derive(Parser)] struct Args { rom: Option, } fn main() -> Result<()> { let args = Args::parse(); let (mut builder, client) = EmulatorBuilder::new(); if let Some(path) = args.rom { builder = builder.with_rom(&path); } thread::spawn(move || { let mut emulator = match builder.build() { Ok(e) => e, Err(err) => { eprintln!("Error initializing emulator: {err}"); process::exit(1); } }; emulator.run(); }); let event_loop = EventLoop::new().unwrap(); event_loop.set_control_flow(ControlFlow::Poll); event_loop.run_app(&mut App::new(client))?; Ok(()) }