This adds a `EventWriter<T>` `SystemParam` that is just a thin wrapper around `ResMut<Events<T>>`. This is primarily to have API symmetry between the reader and writer, and has the added benefit of easily improving the API later with no breaking changes.
71 lines
2.0 KiB
Rust
71 lines
2.0 KiB
Rust
mod event;
|
|
mod system;
|
|
mod window;
|
|
mod windows;
|
|
|
|
use bevy_ecs::system::IntoSystem;
|
|
pub use event::*;
|
|
pub use system::*;
|
|
pub use window::*;
|
|
pub use windows::*;
|
|
|
|
pub mod prelude {
|
|
pub use crate::{
|
|
CursorEntered, CursorLeft, CursorMoved, FileDragAndDrop, ReceivedCharacter, Window,
|
|
WindowDescriptor, WindowMoved, Windows,
|
|
};
|
|
}
|
|
|
|
use bevy_app::{prelude::*, Events};
|
|
|
|
pub struct WindowPlugin {
|
|
pub add_primary_window: bool,
|
|
pub exit_on_close: bool,
|
|
}
|
|
|
|
impl Default for WindowPlugin {
|
|
fn default() -> Self {
|
|
WindowPlugin {
|
|
add_primary_window: true,
|
|
exit_on_close: true,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Plugin for WindowPlugin {
|
|
fn build(&self, app: &mut AppBuilder) {
|
|
app.add_event::<WindowResized>()
|
|
.add_event::<CreateWindow>()
|
|
.add_event::<WindowCreated>()
|
|
.add_event::<WindowCloseRequested>()
|
|
.add_event::<CloseWindow>()
|
|
.add_event::<CursorMoved>()
|
|
.add_event::<CursorEntered>()
|
|
.add_event::<CursorLeft>()
|
|
.add_event::<ReceivedCharacter>()
|
|
.add_event::<WindowFocused>()
|
|
.add_event::<WindowScaleFactorChanged>()
|
|
.add_event::<WindowBackendScaleFactorChanged>()
|
|
.add_event::<FileDragAndDrop>()
|
|
.add_event::<WindowMoved>()
|
|
.init_resource::<Windows>();
|
|
|
|
if self.add_primary_window {
|
|
let world = app.world_mut();
|
|
let window_descriptor = world
|
|
.get_resource::<WindowDescriptor>()
|
|
.map(|descriptor| (*descriptor).clone())
|
|
.unwrap_or_else(WindowDescriptor::default);
|
|
let mut create_window_event = world.get_resource_mut::<Events<CreateWindow>>().unwrap();
|
|
create_window_event.send(CreateWindow {
|
|
id: WindowId::primary(),
|
|
descriptor: window_descriptor,
|
|
});
|
|
}
|
|
|
|
if self.exit_on_close {
|
|
app.add_system(exit_on_window_close_system.system());
|
|
}
|
|
}
|
|
}
|