forestiles/src/lib.rs

187 lines
6.0 KiB
Rust
Raw Normal View History

2024-08-22 17:21:34 +01:00
mod graphics;
mod state;
2024-08-29 08:52:03 +01:00
2024-08-22 17:21:34 +01:00
use state::State;
use graphics::Graphics;
2024-08-29 08:52:03 +01:00
use winit::{event::{Event, WindowEvent}, event_loop::EventLoop, window::Window};
2024-08-20 22:12:18 +01:00
2024-08-29 08:52:03 +01:00
struct App<'a> {
// event_loop: EventLoop<()>,
window: &'a Window,
graphics: Option<Graphics<'a>>,
state: State
}
impl<'a> App<'a> {
fn run(&mut self, event_loop: EventLoop<()>) {
dbg!("run");
event_loop.run(move |event, target| {
2024-08-31 09:41:16 +01:00
// dbg!(&event);
2024-08-29 08:52:03 +01:00
let _ = &self;
// let _ = (&graphics, &window, &state);
match event {
Event::Resumed => {
2024-08-31 09:41:16 +01:00
// std::thread::sleep(Duration::from_secs(5));
2024-08-29 08:52:03 +01:00
self.graphics = Some(pollster::block_on(Graphics::init(&self)));
},
Event::WindowEvent {
event: WindowEvent::CloseRequested,
..
} => target.exit(),
Event::WindowEvent {
event: WindowEvent::RedrawRequested,
..
} => {
if let Some(g) = &mut self.graphics {
self.state.update_if_needed();
self.state.render();
g.update(&self.state);
g.render(&self.state);
}
}
e => {
if let Some(g) = &mut self.graphics {
g.event(&e, &self.window);
}
self.state.event(&e, &self.window);
}
}
}).unwrap();
2024-08-20 22:12:18 +01:00
}
2024-08-29 08:52:03 +01:00
}
2024-08-20 22:12:18 +01:00
2024-08-29 08:52:03 +01:00
#[cfg(not(target_os = "android"))]
pub fn main() {
// #[cfg(target_family = "wasm")]
// let (event_loop, window) = {
// use winit::platform::web::WindowExtWebSys;
// std::panic::set_hook(Box::new(console_error_panic_hook::hook));
// console_log::init().expect("could not initialize logger");
2024-08-20 22:12:18 +01:00
2024-08-29 08:52:03 +01:00
// let event_loop = winit::event_loop::EventLoop::new().unwrap();
// let window = winit::window::WindowBuilder::new().build(&event_loop).unwrap();
// web_sys::window()
// .unwrap()
// .document()
// .unwrap()
// .body()
// .unwrap()
// .append_child(&window.canvas().unwrap())
// .unwrap();
// (event_loop, window)
// };
#[cfg(target_os = "android")]
let (event_loop, window) = {
use winit::platform::android::EventLoopBuilderExtAndroid;
let event_loop = winit::event_loop::EventLoopBuilder::new()
.with_android_app(app)
.build()
2024-08-20 22:12:18 +01:00
.unwrap();
2024-08-29 08:52:03 +01:00
let window = winit::window::WindowBuilder::new().build(&event_loop).unwrap();
(event_loop, window)
};
#[cfg(not(any(target_family = "wasm", target_os = "android")))]
let (event_loop, window) = {
env_logger::init();
let event_loop = winit::event_loop::EventLoop::new().unwrap();
let window = winit::window::WindowBuilder::new().build(&event_loop).unwrap();
(event_loop, window)
};
App {
window: &window,
graphics: None,
state: State::new()
}.run(event_loop);
// static mut graphics: Option<Graphics> = None;
// event_loop.run(move |event, target| {
// // let _ = (&graphics, &window, &state);
// match event {
// Event::Resumed => {
// graphics = Some(pollster::block_on(Graphics::init(&window, &mut state)));
// },
// Event::WindowEvent {
// event: WindowEvent::CloseRequested,
// ..
// } => target.exit(),
// Event::WindowEvent {
// event: WindowEvent::RedrawRequested,
// ..
// } => {
// if let Some(g) = &mut graphics {
// g.update(&state);
// g.render(&state);
// }
// }
// _ => {}
// }
// }).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);
// });
// }
2024-08-24 21:44:13 +01:00
}
#[cfg(target_os = "android")]
#[no_mangle]
fn android_main(app: winit::platform::android::activity::AndroidApp) {
2024-08-31 09:41:16 +01:00
use winit::platform::android::{EventLoopBuilderExtAndroid, activity::WindowManagerFlags};
2024-08-24 21:44:13 +01:00
2024-08-29 08:52:03 +01:00
android_logger::init_once(android_logger::Config::default());
log::error!("testbbbbbbbbbbb");
2024-08-31 09:41:16 +01:00
app.set_window_flags(WindowManagerFlags::KEEP_SCREEN_ON & WindowManagerFlags::FULLSCREEN, WindowManagerFlags::empty());
2024-08-29 08:52:03 +01:00
let event_loop = winit::event_loop::EventLoopBuilder::new()
2024-08-24 21:44:13 +01:00
.with_android_app(app)
.build()
2024-08-29 08:52:03 +01:00
.unwrap();
let window = winit::window::WindowBuilder::new().build(&event_loop).unwrap();
App {
window: &window,
graphics: None,
state: State::new()
}.run(event_loop);
// main();
// 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("Cant build event loop");
2024-08-24 21:44:13 +01:00
2024-08-29 08:52:03 +01:00
// let mut window_builder = WindowBuilder::new();
// let window = window_builder.build(&event_loop)
// .expect("Can't create window!");
2024-08-24 21:44:13 +01:00
2024-08-29 08:52:03 +01:00
// thread::sleep(Duration::from_secs(2));
2024-08-24 21:44:13 +01:00
2024-08-29 08:52:03 +01:00
// let state = State::new();
// pollster::block_on(Graphics::init(&window, state)).run(event_loop);
2024-08-18 18:02:10 +01:00
}