diff --git a/emulator/src/main.rs b/emulator/src/main.rs index 1e85790..e5cff51 100644 --- a/emulator/src/main.rs +++ b/emulator/src/main.rs @@ -22,18 +22,7 @@ use dsa_rs::emulator::{ }, }; -#[cfg(target_os = "android")] -use winit::platform::android::activity::AndroidApp; - -#[cfg(target_os = "android")] -#[no_mangle] -fn android_main(app: AndroidApp) { - main(app); -} - -fn main( - #[cfg(target_os = "android")] app: AndroidApp, -) -> Result<(), Box> { +fn main() -> Result<(), Box> { // Initialize channels and read in configuration. let (cmd_sender, cmd_receiver) = std::sync::mpsc::channel(); let (state_sender, state_reciever) = std::sync::mpsc::channel(); @@ -53,10 +42,6 @@ fn main( #[allow(unused_variables)] let options = eframe::NativeOptions { viewport: egui::ViewportBuilder::default().with_inner_size([800.0, 600.0]), - event_loop_builder: Some(Box::new(move |builder| { - #[cfg(target_os = "android")] - builder.with_android_app(app); - })), ..Default::default() }; @@ -111,3 +96,47 @@ fn setup_ui(cmd_sender: Sender, state_reciever: Receiver) -> Emu ui } + +#[cfg(target_os = "android")] +use winit::platform::android::{EventLoopBuilderExtAndroid, activity::AndroidApp}; + +#[cfg(target_os = "android")] +#[unsafe(no_mangle)] +fn android_main(app: AndroidApp) -> Result<(), Box> { + // Initialize channels and read in configuration. + let (cmd_sender, cmd_receiver) = std::sync::mpsc::channel(); + let (state_sender, state_reciever) = std::sync::mpsc::channel(); + let config = Config::load(Path::new(".dsa.emulator.toml"))?; + + // Setup RPC if enabled. + let (rpc_sender, rpc_reciever) = std::sync::mpsc::channel(); + + let rpc_client = + get_rpc_client_or_none(&config, rpc_sender, rpc_reciever)?.map(Arc::new); + + setup_emulator(cmd_receiver, state_sender, rpc_client); + + let ui = setup_ui(cmd_sender, state_reciever); + + // Run UI. + #[allow(unused_variables)] + let options = eframe::NativeOptions { + viewport: egui::ViewportBuilder::default().with_inner_size([800.0, 600.0]), + event_loop_builder: Some(Box::new(move |builder| { + #[cfg(target_os = "android")] + builder.with_android_app(app); + })), + ..Default::default() + }; + + eframe::run_native( + "DSA Simulator (Damn Simple Architecture 🔥)", + options, + Box::new(move |cc| { + cc.egui_ctx.set_visuals(egui::Visuals::default()); + Ok(Box::new(ui)) + }), + )?; + + Ok(()) +}