mod graphics; mod state; use state::State; use graphics::Graphics; pub fn main() { #[cfg(target_arch = "wasm32")] { std::panic::set_hook(Box::new(console_error_panic_hook::hook)); console_log::init().expect("could not initialize logger"); } #[cfg(not(target_arch = "wasm32"))] { env_logger::init(); } let event_loop = winit::event_loop::EventLoop::new().unwrap(); let window = winit::window::WindowBuilder::new().build(&event_loop).unwrap(); #[cfg(not(target_arch = "wasm32"))] { let state = State::new(); pollster::block_on(Graphics::init(&window, state)).run(event_loop); } #[cfg(target_arch = "wasm32")] { use winit::platform::web::WindowExtWebSys; web_sys::window() .unwrap() .document() .unwrap() .body() .unwrap() .append_child(&window.canvas().unwrap()) .unwrap(); wasm_bindgen_futures::spawn_local(async move { Graphics::init(&window, State::new()).await.run(event_loop); }); } } #[cfg(target_os = "android")] #[no_mangle] fn android_main(app: winit::platform::android::activity::AndroidApp) { use std::thread; use std::time::Duration; use winit::platform::android::EventLoopBuilderExtAndroid; use winit::event_loop::EventLoopBuilder; use winit::window::WindowBuilder; let event_loop = EventLoopBuilder::new() .with_android_app(app) .build() .expect("Can’t build event loop"); let mut window_builder = WindowBuilder::new(); let window = window_builder.build(&event_loop) .expect("Can't create window!"); thread::sleep(Duration::from_secs(2)); let state = State::new(); pollster::block_on(Graphics::init(&window, state)).run(event_loop); }