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}