pub trait System: Send + Sync + 'static {
type In;
type Out;
Show 15 methods
// Required methods
fn name(&self) -> Cow<'static, str>;
fn type_id(&self) -> TypeId;
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);
// Provided methods
fn run(&mut self, input: Self::In, world: &mut World) -> Self::Out { ... }
fn default_system_sets(
&self
) -> Vec<Box<dyn SystemSet + 'static, Global>, Global> { ... }
}
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 IntoSystemConfig
.
Required Associated Types§
type In
type In
The system’s input. See In
for
FunctionSystem
s.
type Out
type Out
The system’s output.
Required Methods§
fn component_access(&self) -> &Access<ComponentId>
fn component_access(&self) -> &Access<ComponentId>
Returns the system’s component Access
.
fn archetype_component_access(&self) -> &Access<ArchetypeComponentId>
fn archetype_component_access(&self) -> &Access<ArchetypeComponentId>
Returns the system’s archetype component Access
.
fn is_exclusive(&self) -> bool
fn is_exclusive(&self) -> bool
Returns true if the system must be run exclusively.
unsafe 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)
fn initialize(&mut self, _world: &mut World)
fn initialize(&mut self, _world: &mut World)
Initialize the system.
fn 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)
fn get_last_change_tick(&self) -> u32
fn get_last_change_tick(&self) -> u32
Gets the system’s last change tick
fn 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§
fn 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.
fn default_system_sets(
&self
) -> Vec<Box<dyn SystemSet + 'static, Global>, Global>
fn default_system_sets( &self ) -> Vec<Box<dyn SystemSet + 'static, Global>, Global>
Returns the system’s default system sets.
Trait Implementations§
§impl IntoSystemConfig<(), SystemConfig> for Box<dyn System<Out = (), In = ()> + 'static, Global>
impl IntoSystemConfig<(), SystemConfig> for Box<dyn System<Out = (), In = ()> + 'static, Global>
§fn in_set(self, set: impl FreeSystemSet) -> Config
fn in_set(self, set: impl FreeSystemSet) -> Config
set
membership.§fn in_base_set(self, set: impl BaseSystemSet) -> Config
fn in_base_set(self, set: impl BaseSystemSet) -> Config
set
. For more information on base sets, see SystemSet::is_base
.§fn no_default_base_set(self) -> Config
fn no_default_base_set(self) -> Config
§fn before<M>(self, set: impl IntoSystemSet<M>) -> Config
fn before<M>(self, set: impl IntoSystemSet<M>) -> Config
set
.§fn after<M>(self, set: impl IntoSystemSet<M>) -> Config
fn after<M>(self, set: impl IntoSystemSet<M>) -> Config
set
.§fn ambiguous_with<M>(self, set: impl IntoSystemSet<M>) -> Config
fn ambiguous_with<M>(self, set: impl IntoSystemSet<M>) -> Config
set
.