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 add_system<M>(&mut self, system: impl IntoSystemConfigs<M>) -> &mut Self
👎Deprecated since 0.11.0: please use add_systems
instead
pub fn add_system<M>(&mut self, system: impl IntoSystemConfigs<M>) -> &mut Self
add_systems
insteadAdd a system to the 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 configure_set(&mut self, set: impl IntoSystemSetConfig) -> &mut Self
pub fn configure_set(&mut self, set: impl IntoSystemSetConfig) -> &mut Self
Configures a system set in this schedule, adding it if it does not exist.
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_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.
Trait Implementations§
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, Global>) -> Box<dyn Any, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>
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, Global>) -> Rc<dyn Any, Global>
fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>
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> 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