diff options
Diffstat (limited to 'ecs/src')
-rw-r--r-- | ecs/src/lib.rs | 30 | ||||
-rw-r--r-- | ecs/src/phase.rs | 6 |
2 files changed, 20 insertions, 16 deletions
diff --git a/ecs/src/lib.rs b/ecs/src/lib.rs index fa5a352..fce780c 100644 --- a/ecs/src/lib.rs +++ b/ecs/src/lib.rs @@ -23,10 +23,15 @@ use crate::event::component::{Added, Removed}; use crate::event::{Emitted as EmittedEvent, NewEvents, Submitter as EventSubmitter}; use crate::extension::{Collector as ExtensionCollector, Extension}; use crate::lock::Lock; -use crate::pair::{ChildOf, DependsOn, Pair, Wildcard}; -use crate::phase::{Phase, START as START_PHASE}; +use crate::pair::{ChildOf, DependsOn, Pair}; +use crate::phase::{ + Phase, + POST_UPDATE as POST_UPDATE_PHASE, + PRE_UPDATE as PRE_UPDATE_PHASE, + START as START_PHASE, + UPDATE as UPDATE_PHASE, +}; use crate::query::flexible::Query as FlexibleQuery; -use crate::query::term::Without; use crate::query::{ TermWithFieldTuple as QueryTermWithFieldTuple, TermWithoutFieldTuple as QueryTermWithoutFieldTuple, @@ -388,18 +393,17 @@ impl World } } - fn perform_phases(&self) + fn perform_single_phase(&self, phase_entity_id: Uid) { - let phase_query = self.query::<(&Phase,), (Without<Pair<ChildOf, Wildcard>>,)>(); - - for (phase_entity_id, _) in phase_query.iter_with_euids() { - if phase_entity_id == *START_PHASE { - continue; - } + self.query_and_run_systems(phase_entity_id); + self.perform_child_phases(phase_entity_id); + } - self.query_and_run_systems(phase_entity_id); - self.perform_child_phases(phase_entity_id); - } + fn perform_phases(&self) + { + self.perform_single_phase(*PRE_UPDATE_PHASE); + self.perform_single_phase(*UPDATE_PHASE); + self.perform_single_phase(*POST_UPDATE_PHASE); } fn emit_new_events(&self) diff --git a/ecs/src/phase.rs b/ecs/src/phase.rs index 9e3be24..39f2a08 100644 --- a/ecs/src/phase.rs +++ b/ecs/src/phase.rs @@ -1,6 +1,5 @@ use ecs_macros::Component; -use crate::pair::{ChildOf, Pair}; use crate::{declare_entity, World}; #[derive(Debug, Default, Clone, Copy, Component)] @@ -8,12 +7,13 @@ pub struct Phase; declare_entity!(pub START, (Phase,)); declare_entity!(pub PRE_UPDATE, (Phase,)); -declare_entity!(pub UPDATE, (Phase, Pair::builder().relation::<ChildOf>().target_id(*PRE_UPDATE).build())); +declare_entity!(pub UPDATE, (Phase,)); +declare_entity!(pub POST_UPDATE, (Phase,)); -#[doc(hidden)] pub(crate) fn spawn_entities(world: &mut World) { world.create_declared_entity(&START); world.create_declared_entity(&PRE_UPDATE); world.create_declared_entity(&UPDATE); + world.create_declared_entity(&POST_UPDATE); } |