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.
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);
}
Implementations§
source§impl Schedule
impl Schedule
sourcepub fn new(label: impl ScheduleLabel) -> Self
pub fn new(label: impl ScheduleLabel) -> Self
Constructs an empty Schedule
.
sourcepub fn label(&self) -> InternedScheduleLabel
pub fn label(&self) -> InternedScheduleLabel
Get the InternedScheduleLabel
for this Schedule
.
sourcepub fn add_systems<M>(
&mut self,
systems: impl IntoSystemConfigs<M>
) -> &mut Self
pub fn add_systems<M>( &mut self, systems: impl IntoSystemConfigs<M> ) -> &mut Self
Add a collection of systems to the schedule.
sourcepub fn ignore_ambiguity<M1, M2, S1, S2>(&mut self, a: S1, b: S2) -> &mut Selfwhere
S1: IntoSystemSet<M1>,
S2: IntoSystemSet<M2>,
pub fn ignore_ambiguity<M1, M2, S1, S2>(&mut self, a: S1, b: S2) -> &mut Selfwhere
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
.
sourcepub fn configure_sets(&mut self, sets: impl IntoSystemSetConfigs) -> &mut Self
pub fn configure_sets(&mut self, sets: impl IntoSystemSetConfigs) -> &mut Self
Configures a collection of system sets in this schedule, adding them if they does not exist.
sourcepub fn set_build_settings(
&mut self,
settings: ScheduleBuildSettings
) -> &mut Self
pub fn set_build_settings( &mut self, settings: ScheduleBuildSettings ) -> &mut Self
Changes miscellaneous build settings.
sourcepub fn get_build_settings(&self) -> ScheduleBuildSettings
pub fn get_build_settings(&self) -> ScheduleBuildSettings
Returns the schedule’s current ScheduleBuildSettings
.
sourcepub fn get_executor_kind(&self) -> ExecutorKind
pub fn get_executor_kind(&self) -> ExecutorKind
Returns the schedule’s current execution strategy.
sourcepub fn set_executor_kind(&mut self, executor: ExecutorKind) -> &mut Self
pub fn set_executor_kind(&mut self, executor: ExecutorKind) -> &mut Self
Sets the schedule’s execution strategy.
sourcepub fn set_apply_final_deferred(
&mut self,
apply_final_deferred: bool
) -> &mut Self
pub fn set_apply_final_deferred( &mut self, apply_final_deferred: bool ) -> &mut Self
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
apply_deferred
. By default this
setting is true, but may be disabled if needed.
sourcepub 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.
sourcepub fn initialize(
&mut self,
world: &mut World
) -> Result<(), ScheduleBuildError>
pub fn initialize( &mut self, world: &mut World ) -> Result<(), 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
.
sourcepub fn graph(&self) -> &ScheduleGraph
pub fn graph(&self) -> &ScheduleGraph
Returns the ScheduleGraph
.
sourcepub fn graph_mut(&mut self) -> &mut ScheduleGraph
pub fn graph_mut(&mut self) -> &mut ScheduleGraph
Returns a mutable reference to the ScheduleGraph
.
sourcepub 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.
sourcepub fn systems(
&self
) -> Result<impl Iterator<Item = (NodeId, &BoxedSystem)> + Sized, ScheduleNotInitialized>
pub fn systems( &self ) -> Result<impl Iterator<Item = (NodeId, &BoxedSystem)> + Sized, 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.
sourcepub fn systems_len(&self) -> usize
pub fn systems_len(&self) -> usize
Returns the number of systems in this schedule.
Trait Implementations§
source§impl Default for Schedule
impl Default for Schedule
source§fn default() -> Self
fn default() -> Self
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 !RefUnwindSafe for Schedule
impl Send for Schedule
impl Sync for Schedule
impl Unpin 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
source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§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>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.source§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>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.source§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.source§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.source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Self
using data from the given World
.