use crate::{ClosingWindow, PrimaryWindow, Window, WindowCloseRequested};
use bevy_app::AppExit;
use bevy_ecs::prelude::*;
pub fn exit_on_all_closed(mut app_exit_writer: MessageWriter<AppExit>, windows: Query<&Window>) {
if windows.is_empty() {
log::info!("No windows are open, exiting");
app_exit_writer.write(AppExit::Success);
}
}
pub fn exit_on_primary_closed(
mut app_exit_writer: MessageWriter<AppExit>,
windows: Query<(), (With<Window>, With<PrimaryWindow>)>,
) {
if windows.is_empty() {
log::info!("Primary window was closed, exiting");
app_exit_writer.write(AppExit::Success);
}
}
pub fn close_when_requested(
mut commands: Commands,
mut closed: MessageReader<WindowCloseRequested>,
closing: Query<Entity, With<ClosingWindow>>,
) {
for window in closing.iter() {
commands.entity(window).despawn();
}
for event in closed.read() {
commands.entity(event.window).try_insert(ClosingWindow);
}
}