Simplify runner app exit code. (#13074)

# Objective

Both the shedule and winit runners use/reimplement `app_exit_manual`
even tough they can use `app_exit`

## Solution

Nuke `app_exit_manual` from orbit.
This commit is contained in:
Brezak 2024-04-23 22:42:00 +02:00 committed by GitHub
parent dcbdae003f
commit 30b0931c8a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 12 additions and 44 deletions

View File

@ -867,17 +867,7 @@ impl App {
pub fn should_exit(&self) -> Option<AppExit> { pub fn should_exit(&self) -> Option<AppExit> {
let mut reader = ManualEventReader::default(); let mut reader = ManualEventReader::default();
self.should_exit_manual(&mut reader)
}
/// Several app runners in this crate keep their own [`ManualEventReader<AppExit>`].
/// This exists to accommodate them.
pub(crate) fn should_exit_manual(
&self,
reader: &mut ManualEventReader<AppExit>,
) -> Option<AppExit> {
let events = self.world().get_resource::<Events<AppExit>>()?; let events = self.world().get_resource::<Events<AppExit>>()?;
let mut events = reader.read(events); let mut events = reader.read(events);
if events.len() != 0 { if events.len() != 0 {

View File

@ -3,7 +3,6 @@ use crate::{
plugin::Plugin, plugin::Plugin,
PluginsState, PluginsState,
}; };
use bevy_ecs::event::ManualEventReader;
use bevy_utils::{Duration, Instant}; use bevy_utils::{Duration, Instant};
#[cfg(target_arch = "wasm32")] #[cfg(target_arch = "wasm32")]
@ -82,26 +81,25 @@ impl Plugin for ScheduleRunnerPlugin {
app.cleanup(); app.cleanup();
} }
let mut app_exit_event_reader = ManualEventReader::<AppExit>::default();
match run_mode { match run_mode {
RunMode::Once => { RunMode::Once => {
app.update(); app.update();
if let Some(exit) = app.should_exit_manual(&mut app_exit_event_reader) { if let Some(exit) = app.should_exit() {
return exit; return exit;
} }
AppExit::Success AppExit::Success
} }
RunMode::Loop { wait } => { RunMode::Loop { wait } => {
let mut tick = move |app: &mut App, let tick = move |app: &mut App,
wait: Option<Duration>| wait: Option<Duration>|
-> Result<Option<Duration>, AppExit> { -> Result<Option<Duration>, AppExit> {
let start_time = Instant::now(); let start_time = Instant::now();
app.update(); app.update();
if let Some(exit) = app.should_exit_manual(&mut app_exit_event_reader) { if let Some(exit) = app.should_exit() {
return Err(exit); return Err(exit);
}; };

View File

@ -286,7 +286,6 @@ pub fn winit_runner(mut app: App) -> AppExit {
let handle_exit_status = exit_status.clone(); let handle_exit_status = exit_status.clone();
// prepare structures to access data in the world // prepare structures to access data in the world
let mut app_exit_event_reader = ManualEventReader::<AppExit>::default();
let mut redraw_event_reader = ManualEventReader::<RequestRedraw>::default(); let mut redraw_event_reader = ManualEventReader::<RequestRedraw>::default();
let mut focused_windows_state: SystemState<(Res<WinitSettings>, Query<&Window>)> = let mut focused_windows_state: SystemState<(Res<WinitSettings>, Query<&Window>)> =
@ -308,7 +307,6 @@ pub fn winit_runner(mut app: App) -> AppExit {
handle_winit_event( handle_winit_event(
&mut app, &mut app,
&mut app_exit_event_reader,
&mut runner_state, &mut runner_state,
&mut create_window, &mut create_window,
&mut event_writer_system_state, &mut event_writer_system_state,
@ -337,7 +335,6 @@ pub fn winit_runner(mut app: App) -> AppExit {
#[allow(clippy::too_many_arguments /* TODO: probs can reduce # of args */)] #[allow(clippy::too_many_arguments /* TODO: probs can reduce # of args */)]
fn handle_winit_event( fn handle_winit_event(
app: &mut App, app: &mut App,
app_exit_event_reader: &mut ManualEventReader<AppExit>,
runner_state: &mut WinitAppRunnerState, runner_state: &mut WinitAppRunnerState,
create_window: &mut SystemState<CreateWindowParams<Added<Window>>>, create_window: &mut SystemState<CreateWindowParams<Added<Window>>>,
event_writer_system_state: &mut SystemState<( event_writer_system_state: &mut SystemState<(
@ -366,19 +363,12 @@ fn handle_winit_event(
} }
runner_state.redraw_requested = true; runner_state.redraw_requested = true;
// TODO: Replace with `App::should_exit()` if let Some(app_exit) = app.should_exit() {
if let Some(app_exit_events) = app.world().get_resource::<Events<AppExit>>() { *exit_status = app_exit;
let mut exit_events = app_exit_event_reader.read(app_exit_events);
if exit_events.len() != 0 {
*exit_status = exit_events
.find(|exit| exit.is_error())
.cloned()
.unwrap_or(AppExit::Success);
event_loop.exit(); event_loop.exit();
return; return;
} }
} }
}
match event { match event {
Event::AboutToWait => { Event::AboutToWait => {
@ -430,7 +420,6 @@ fn handle_winit_event(
focused_windows_state, focused_windows_state,
event_loop, event_loop,
create_window, create_window,
app_exit_event_reader,
redraw_event_reader, redraw_event_reader,
winit_events, winit_events,
exit_status, exit_status,
@ -658,7 +647,6 @@ fn handle_winit_event(
focused_windows_state, focused_windows_state,
event_loop, event_loop,
create_window, create_window,
app_exit_event_reader,
redraw_event_reader, redraw_event_reader,
winit_events, winit_events,
exit_status, exit_status,
@ -759,7 +747,6 @@ fn run_app_update_if_should(
focused_windows_state: &mut SystemState<(Res<WinitSettings>, Query<&Window>)>, focused_windows_state: &mut SystemState<(Res<WinitSettings>, Query<&Window>)>,
event_loop: &EventLoopWindowTarget<UserEvent>, event_loop: &EventLoopWindowTarget<UserEvent>,
create_window: &mut SystemState<CreateWindowParams<Added<Window>>>, create_window: &mut SystemState<CreateWindowParams<Added<Window>>>,
app_exit_event_reader: &mut ManualEventReader<AppExit>,
redraw_event_reader: &mut ManualEventReader<RequestRedraw>, redraw_event_reader: &mut ManualEventReader<RequestRedraw>,
winit_events: &mut Vec<WinitEvent>, winit_events: &mut Vec<WinitEvent>,
exit_status: &mut AppExit, exit_status: &mut AppExit,
@ -822,19 +809,12 @@ fn run_app_update_if_should(
} }
} }
// TODO: Replace with `App::should_exit()` if let Some(app_exit) = app.should_exit() {
if let Some(app_exit_events) = app.world().get_resource::<Events<AppExit>>() { *exit_status = app_exit;
let mut exit_events = app_exit_event_reader.read(app_exit_events);
if exit_events.len() != 0 {
*exit_status = exit_events
.find(|exit| exit.is_error())
.cloned()
.unwrap_or(AppExit::Success);
event_loop.exit(); event_loop.exit();
return; return;
} }
} }
}
// create any new windows // create any new windows
// (even if app did not update, some may have been created by plugin setup) // (even if app did not update, some may have been created by plugin setup)