use legion::prelude::*; use bevy_app::{Events, AppExit, GetEventReader}; use crate::{WindowId, WindowCloseRequested}; pub fn exit_on_window_close_system(resources: &mut Resources, window_id: Option) -> Box { let mut window_close_requested_event_reader = resources.get_event_reader::(); SystemBuilder::new("exit_on_window_close") .read_resource::>() .write_resource::>() .build(move |_, _, (ref window_close_requested_events, ref mut app_exit_events), _| { for window_close_requested_event in window_close_requested_events.iter(&mut window_close_requested_event_reader) { match window_id.as_ref() { Some(window_id) => if *window_id == window_close_requested_event.id { app_exit_events.send(AppExit); }, None => if window_close_requested_event.is_primary { app_exit_events.send(AppExit); } } } }) }