diff --git a/crates/bevy_ecs/src/schedule/state.rs b/crates/bevy_ecs/src/schedule/state.rs index 629f926336b28..d6c6963032aa0 100644 --- a/crates/bevy_ecs/src/schedule/state.rs +++ b/crates/bevy_ecs/src/schedule/state.rs @@ -98,7 +98,7 @@ impl Stage for StateStage { } fn run(&mut self, world: &mut World, resources: &mut Resources) { - loop { + let current_stage = loop { let (next_stage, current_stage) = { let mut state = resources .get_mut::>() @@ -132,14 +132,17 @@ impl Stage for StateStage { { enter_next.run(world, resources); } - } else if let Some(update_current) = self - .stages - .get_mut(¤t_stage) - .and_then(|stage| stage.update.as_mut()) - { - update_current.run(world, resources); - break; + } else { + break current_stage; } + }; + + if let Some(update_current) = self + .stages + .get_mut(¤t_stage) + .and_then(|stage| stage.update.as_mut()) + { + update_current.run(world, resources); } } }