gravitron_window/
lib.rs

1use config::WindowConfig;
2use ecs::{
3  resources::{event_loop::EventLoop, handle::WindowHandle, input::Input},
4  systems::input_update::update_input,
5};
6use gravitron_plugin::{
7  app::{AppBuilder, Build, Finalize},
8  stages::MainSystemStage,
9  Plugin,
10};
11
12pub use winit;
13
14pub mod config;
15pub mod ecs;
16mod window;
17
18pub struct WindowPlugin;
19
20impl Plugin for WindowPlugin {
21  fn build(&self, builder: &mut AppBuilder<Build>) {
22    builder.add_config(WindowConfig::default());
23    builder.add_main_system_at_stage(update_input, MainSystemStage::PreRender);
24  }
25
26  fn finalize(&self, builder: &mut AppBuilder<Finalize>) {
27    let config = builder.config::<WindowConfig>().unwrap();
28    let (event_loop, window) = EventLoop::init(config.clone());
29
30    builder.add_resource(event_loop);
31    builder.add_resource(WindowHandle::new(&window).expect("Failed to create window handle"));
32    builder.add_resource(window);
33    builder.add_resource(Input::default());
34  }
35}