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:
parent
dcbdae003f
commit
30b0931c8a
@ -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 {
|
||||||
|
|||||||
@ -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);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -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,17 +363,10 @@ 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);
|
event_loop.exit();
|
||||||
if exit_events.len() != 0 {
|
return;
|
||||||
*exit_status = exit_events
|
|
||||||
.find(|exit| exit.is_error())
|
|
||||||
.cloned()
|
|
||||||
.unwrap_or(AppExit::Success);
|
|
||||||
event_loop.exit();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -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,17 +809,10 @@ 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);
|
event_loop.exit();
|
||||||
if exit_events.len() != 0 {
|
return;
|
||||||
*exit_status = exit_events
|
|
||||||
.find(|exit| exit.is_error())
|
|
||||||
.cloned()
|
|
||||||
.unwrap_or(AppExit::Success);
|
|
||||||
event_loop.exit();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user