pub trait System: Send + Sync + 'static {
type In;
type Out;
Show 14 methods
fn name(&self) -> Cow<'static, str>;
fn component_access(&self) -> &Access<ComponentId>;
fn archetype_component_access(&self) -> &Access<ArchetypeComponentId>;
fn is_send(&self) -> bool;
fn is_exclusive(&self) -> bool;
unsafe fn run_unsafe(&mut self, input: Self::In, world: &World) -> Self::Out;
fn apply_buffers(&mut self, world: &mut World);
fn initialize(&mut self, _world: &mut World);
fn update_archetype_component_access(&mut self, world: &World);
fn check_change_tick(&mut self, change_tick: u32);
fn get_last_change_tick(&self) -> u32;
fn set_last_change_tick(&mut self, last_change_tick: u32);
fn run(&mut self, input: Self::In, world: &mut World) -> Self::Out { ... }
fn default_labels(&self) -> Vec<SystemLabelId> ⓘ { ... }
}
Expand description
An ECS system that can be added to a Schedule
Systems are functions with all arguments implementing
SystemParam
.
Systems are added to an application using App::add_system(my_system)
or similar methods, and will generally run once per pass of the main loop.
Systems are executed in parallel, in opportunistic order; data access is managed automatically.
It’s possible to specify explicit execution order between specific systems,
see SystemDescriptor
.
Required Associated Types§
Required Methods§
sourcefn component_access(&self) -> &Access<ComponentId>
fn component_access(&self) -> &Access<ComponentId>
Returns the system’s component Access
.
sourcefn archetype_component_access(&self) -> &Access<ArchetypeComponentId>
fn archetype_component_access(&self) -> &Access<ArchetypeComponentId>
Returns the system’s archetype component Access
.
sourcefn is_exclusive(&self) -> bool
fn is_exclusive(&self) -> bool
Returns true if the system must be run exclusively.
sourceunsafe fn run_unsafe(&mut self, input: Self::In, world: &World) -> Self::Out
unsafe fn run_unsafe(&mut self, input: Self::In, world: &World) -> Self::Out
Runs the system with the given input in the world. Unlike System::run
, this function
takes a shared reference to World
and may therefore break Rust’s aliasing rules, making
it unsafe to call.
Safety
This might access world and resources in an unsafe manner. This should only be called in one
of the following contexts:
1. This system is the only system running on the given world across all threads.
2. This system only runs in parallel with other systems that do not conflict with the
System::archetype_component_access()
.
fn apply_buffers(&mut self, world: &mut World)
sourcefn initialize(&mut self, _world: &mut World)
fn initialize(&mut self, _world: &mut World)
Initialize the system.
sourcefn update_archetype_component_access(&mut self, world: &World)
fn update_archetype_component_access(&mut self, world: &World)
Update the system’s archetype component Access
.
fn check_change_tick(&mut self, change_tick: u32)
sourcefn get_last_change_tick(&self) -> u32
fn get_last_change_tick(&self) -> u32
Gets the system’s last change tick
sourcefn set_last_change_tick(&mut self, last_change_tick: u32)
fn set_last_change_tick(&mut self, last_change_tick: u32)
Sets the system’s last change tick
Warning
This is a complex and error-prone operation, that can have unexpected consequences on any system relying on this code. However, it can be an essential escape hatch when, for example, you are trying to synchronize representations using change detection and need to avoid infinite recursion.
Provided Methods§
sourcefn run(&mut self, input: Self::In, world: &mut World) -> Self::Out
fn run(&mut self, input: Self::In, world: &mut World) -> Self::Out
Runs the system with the given input in the world.
sourcefn default_labels(&self) -> Vec<SystemLabelId> ⓘ
fn default_labels(&self) -> Vec<SystemLabelId> ⓘ
The default labels for the system