mirror of
https://github.com/bevyengine/bevy
synced 2024-12-20 01:53:12 +00:00
b45d83ebda
# Objective - Fixes #15106 ## Solution - Trivial refactor to rename the method. The duplicate method `push` was removed as well. This will simpify the API and make the semantics more clear. `Add` implies that the action happens immediately, whereas in reality, the command is queued to be run eventually. - `ChildBuilder::add_command` has similarly been renamed to `queue_command`. ## Testing Unit tests should suffice for this simple refactor. --- ## Migration Guide - `Commands::add` and `Commands::push` have been replaced with `Commnads::queue`. - `ChildBuilder::add_command` has been renamed to `ChildBuilder::queue_command`.
30 lines
1.1 KiB
Rust
30 lines
1.1 KiB
Rust
use bevy_ecs::{system::Commands, world::World};
|
|
use bevy_utils::tracing::debug;
|
|
|
|
use crate::state::{FreelyMutableState, NextState};
|
|
|
|
/// Extension trait for [`Commands`] adding `bevy_state` helpers.
|
|
pub trait CommandsStatesExt {
|
|
/// Sets the next state the app should move to.
|
|
///
|
|
/// Internally this schedules a command that updates the [`NextState<S>`](crate::prelude::NextState)
|
|
/// resource with `state`.
|
|
///
|
|
/// Note that commands introduce sync points to the ECS schedule, so modifying `NextState`
|
|
/// directly may be more efficient depending on your use-case.
|
|
fn set_state<S: FreelyMutableState>(&mut self, state: S);
|
|
}
|
|
|
|
impl CommandsStatesExt for Commands<'_, '_> {
|
|
fn set_state<S: FreelyMutableState>(&mut self, state: S) {
|
|
self.queue(move |w: &mut World| {
|
|
let mut next = w.resource_mut::<NextState<S>>();
|
|
if let NextState::Pending(prev) = &*next {
|
|
if *prev != state {
|
|
debug!("overwriting next state {:?} with {:?}", prev, state);
|
|
}
|
|
}
|
|
next.set(state);
|
|
});
|
|
}
|
|
}
|