Struct Schedule
pub struct Schedule { /* private fields */ }Expand description
A collection of systems, and the metadata and executor needed to run them in a certain order under certain conditions.
§Schedule labels
Each schedule has a ScheduleLabel value. This value is used to uniquely identify the
schedule when added to a World’s Schedules, and may be used to specify which schedule
a system should be added to.
§Example
Here is an example of a Schedule running a “Hello world” system:
fn hello_world() { println!("Hello world!") }
fn main() {
let mut world = World::new();
let mut schedule = Schedule::default();
schedule.add_systems(hello_world);
schedule.run(&mut world);
}A schedule can also run several systems in an ordered way:
fn system_one() { println!("System 1 works!") }
fn system_two() { println!("System 2 works!") }
fn system_three() { println!("System 3 works!") }
fn main() {
let mut world = World::new();
let mut schedule = Schedule::default();
schedule.add_systems((
system_two,
system_one.before(system_two),
system_three.after(system_two),
));
schedule.run(&mut world);
}Schedules are often inserted into a World and identified by their ScheduleLabel only:
use bevy_ecs::schedule::ScheduleLabel;
// Declare a new schedule label.
#[derive(ScheduleLabel, Clone, Debug, PartialEq, Eq, Hash, Default)]
struct Update;
// This system shall be part of the schedule.
fn an_update_system() {
println!("Hello world!");
}
fn main() {
let mut world = World::new();
// Add a system to the schedule with that label (creating it automatically).
world.get_resource_or_init::<Schedules>().add_systems(Update, an_update_system);
// Run the schedule, and therefore run the system.
world.run_schedule(Update);
}Implementations§
§impl Schedule
impl Schedule
pub fn new(label: impl ScheduleLabel) -> Schedule
pub fn new(label: impl ScheduleLabel) -> Schedule
Constructs an empty Schedule.
pub fn is_changed(&self) -> bool
pub fn is_changed(&self) -> bool
Returns whether this schedule has been changed since the last time it was built.
pub fn label(&self) -> Interned<dyn ScheduleLabel>
pub fn label(&self) -> Interned<dyn ScheduleLabel>
Returns the InternedScheduleLabel for this Schedule,
corresponding to the ScheduleLabel this schedule was created with.
pub fn add_systems<M>(
&mut self,
systems: impl IntoScheduleConfigs<Box<dyn System<Out = (), In = ()>>, M>,
) -> &mut Schedule
pub fn add_systems<M>( &mut self, systems: impl IntoScheduleConfigs<Box<dyn System<Out = (), In = ()>>, M>, ) -> &mut Schedule
Add a collection of systems to the schedule.
pub fn remove_systems_in_set<M>(
&mut self,
set: impl IntoSystemSet<M>,
world: &mut World,
policy: ScheduleCleanupPolicy,
) -> Result<usize, ScheduleError>
pub fn remove_systems_in_set<M>( &mut self, set: impl IntoSystemSet<M>, world: &mut World, policy: ScheduleCleanupPolicy, ) -> Result<usize, ScheduleError>
Removes all systems in a SystemSet. This will cause the schedule to be rebuilt when
the schedule is run again. A ScheduleError is returned if the schedule needs to be
Schedule::initialize’d or the set is not found.
Note that this can remove all systems of a type if you pass the system to this function as systems implicitly create a set based on the system type.
§Example
let mut schedule = Schedule::default();
// add the system to the schedule
schedule.add_systems(my_system);
let mut world = World::default();
// remove the system
schedule.remove_systems_in_set(my_system, &mut world, ScheduleCleanupPolicy::RemoveSystemsOnly);pub fn ignore_ambiguity<M1, M2, S1, S2>(
&mut self,
a: S1,
b: S2,
) -> &mut Schedulewhere
S1: IntoSystemSet<M1>,
S2: IntoSystemSet<M2>,
pub fn ignore_ambiguity<M1, M2, S1, S2>(
&mut self,
a: S1,
b: S2,
) -> &mut Schedulewhere
S1: IntoSystemSet<M1>,
S2: IntoSystemSet<M2>,
Suppress warnings and errors that would result from systems in these sets having ambiguities
(conflicting access but indeterminate order) with systems in set.
pub fn configure_sets<M>(
&mut self,
sets: impl IntoScheduleConfigs<Interned<dyn SystemSet>, M>,
) -> &mut Schedule
pub fn configure_sets<M>( &mut self, sets: impl IntoScheduleConfigs<Interned<dyn SystemSet>, M>, ) -> &mut Schedule
Configures a collection of system sets in this schedule, adding them if they does not exist.
pub fn add_build_pass<T>(&mut self, pass: T) -> &mut Schedulewhere
T: ScheduleBuildPass,
pub fn add_build_pass<T>(&mut self, pass: T) -> &mut Schedulewhere
T: ScheduleBuildPass,
Add a custom build pass to the schedule.
pub fn remove_build_pass<T>(&mut self)where
T: ScheduleBuildPass,
pub fn remove_build_pass<T>(&mut self)where
T: ScheduleBuildPass,
Remove a custom build pass.
pub fn set_build_settings(
&mut self,
settings: ScheduleBuildSettings,
) -> &mut Schedule
pub fn set_build_settings( &mut self, settings: ScheduleBuildSettings, ) -> &mut Schedule
Changes miscellaneous build settings.
If settings.auto_insert_apply_deferred
is false, this clears *_ignore_deferred edge settings configured so far.
Generally this method should be used before adding systems or set configurations to the schedule, not after.
pub fn get_build_settings(&self) -> ScheduleBuildSettings
pub fn get_build_settings(&self) -> ScheduleBuildSettings
Returns the schedule’s current ScheduleBuildSettings.
pub fn set_executor(
&mut self,
executor: impl SystemExecutor + 'static,
) -> &mut Schedule
pub fn set_executor( &mut self, executor: impl SystemExecutor + 'static, ) -> &mut Schedule
Replaces the schedule’s executor.
pub fn set_apply_final_deferred(
&mut self,
apply_final_deferred: bool,
) -> &mut Schedule
pub fn set_apply_final_deferred( &mut self, apply_final_deferred: bool, ) -> &mut Schedule
Set whether the schedule applies deferred system buffers on final time or not. This is a catch-all
in case a system uses commands but was not explicitly ordered before an instance of
ApplyDeferred. By default this
setting is true, but may be disabled if needed.
pub fn run(&mut self, world: &mut World)
pub fn run(&mut self, world: &mut World)
Runs all systems in this schedule on the world, using its current execution strategy.
pub fn initialize(
&mut self,
world: &mut World,
) -> Result<Option<ScheduleBuildMetadata>, ScheduleBuildError>
pub fn initialize( &mut self, world: &mut World, ) -> Result<Option<ScheduleBuildMetadata>, ScheduleBuildError>
Initializes any newly-added systems and conditions, rebuilds the executable schedule, and re-initializes the executor.
Moves all systems and run conditions out of the ScheduleGraph. If the schedule is built
successfully, returns Some with the metadata. If the schedule has previously been built
successfully, returns None.
pub fn graph(&self) -> &ScheduleGraph
pub fn graph(&self) -> &ScheduleGraph
Returns the ScheduleGraph.
pub fn graph_mut(&mut self) -> &mut ScheduleGraph
pub fn graph_mut(&mut self) -> &mut ScheduleGraph
Returns a mutable reference to the ScheduleGraph.
pub fn check_change_ticks(&mut self, check: CheckChangeTicks)
pub fn check_change_ticks(&mut self, check: CheckChangeTicks)
Iterates the change ticks of all systems in the schedule and clamps any older than
MAX_CHANGE_AGE.
This prevents overflow and thus prevents false positives.
pub fn apply_deferred(&mut self, world: &mut World)
pub fn apply_deferred(&mut self, world: &mut World)
Directly applies any accumulated Deferred system parameters (like Commands) to the world.
Like always, deferred system parameters are applied in the “topological sort order” of the schedule graph. As a result, buffers from one system are only guaranteed to be applied before those of other systems if there is an explicit system ordering between the two systems.
This is used in rendering to extract data from the main world, storing the data in system buffers, before applying their buffers in a different world.
pub fn systems(
&self,
) -> Result<impl Iterator<Item = (SystemKey, &Box<dyn System<Out = (), In = ()>>)>, ScheduleNotInitialized>
pub fn systems( &self, ) -> Result<impl Iterator<Item = (SystemKey, &Box<dyn System<Out = (), In = ()>>)>, ScheduleNotInitialized>
Returns an iterator over all systems in this schedule.
Note: this method will return ScheduleNotInitialized if the
schedule has never been initialized or run.
pub fn systems_len(&self) -> usize
pub fn systems_len(&self) -> usize
Returns the number of systems in this schedule.
Trait Implementations§
§impl Default for Schedule
impl Default for Schedule
§fn default() -> Schedule
fn default() -> Schedule
Creates a schedule with a default label. Only use in situations where
you don’t care about the ScheduleLabel. Inserting a default schedule
into the world risks overwriting another schedule. For most situations
you should use Schedule::new.
Auto Trait Implementations§
impl Freeze for Schedule
impl !RefUnwindSafe for Schedule
impl Send for Schedule
impl Sync for Schedule
impl Unpin for Schedule
impl UnsafeUnpin for Schedule
impl !UnwindSafe for Schedule
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSend for T
impl<T> DowncastSend for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Creates Self using default().
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
§fn into_result(self) -> Result<T, RunSystemError>
fn into_result(self) -> Result<T, RunSystemError>
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.