diff options
author | HampusM <hampus@hampusmat.com> | 2025-03-18 16:59:53 +0100 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2025-03-19 20:24:12 +0100 |
commit | 76e7e612e7b516bf52b508ae5bb367b1ddc3babc (patch) | |
tree | 1975b4db0eecb74583ab78e58afa50b5326347b2 /ecs/src/lib.rs | |
parent | 44cd47fd67102902b649c98b85c5abb9a0da39f8 (diff) |
refactor(ecs): replace component::RefSequence with query terms
Diffstat (limited to 'ecs/src/lib.rs')
-rw-r--r-- | ecs/src/lib.rs | 50 |
1 files changed, 27 insertions, 23 deletions
diff --git a/ecs/src/lib.rs b/ecs/src/lib.rs index ad83d1e..cb2059b 100644 --- a/ecs/src/lib.rs +++ b/ecs/src/lib.rs @@ -11,12 +11,7 @@ use hashbrown::HashMap; use crate::actions::Action; use crate::component::storage::Storage as ComponentStorage; -use crate::component::{ - Component, - Metadata as ComponentMetadata, - RefSequence as ComponentRefSequence, - Sequence as ComponentSequence, -}; +use crate::component::{Component, Sequence as ComponentSequence}; use crate::entity::CREATE_STATIC_ENTITIES; use crate::event::component::Kind as ComponentEventKind; use crate::extension::{Collector as ExtensionCollector, Extension}; @@ -24,13 +19,17 @@ use crate::lock::{Lock, WriteGuard}; use crate::phase::{Phase, START as START_PHASE}; use crate::query::flexible::Query as FlexibleQuery; use crate::query::options::{Not, Options as QueryOptions, With}; +use crate::query::{ + ComponentIter, + TermSequence as QueryTermSequence, + Terms as QueryTerms, +}; use crate::relationship::{ChildOf, DependsOn, Relationship}; use crate::sole::Sole; use crate::stats::Stats; use crate::system::{System, SystemComponent}; use crate::type_name::TypeName; use crate::uid::{Kind as UidKind, Uid}; -use crate::util::Sortable; pub mod actions; pub mod component; @@ -174,22 +173,20 @@ impl World extension.collect(extension_collector); } - pub fn query<Comps, OptionsT>(&self) -> Query<Comps, OptionsT> + pub fn query<Terms, OptionsT>(&self) -> Query<Terms, OptionsT> where - Comps: ComponentRefSequence, + Terms: QueryTermSequence, OptionsT: QueryOptions, { Query::new(self) } - pub fn flexible_query<CompMetadata>( + pub fn flexible_query<'terms>( &self, - comp_metadata: CompMetadata, - ) -> FlexibleQuery<CompMetadata> - where - CompMetadata: Sortable<Item = ComponentMetadata> + AsRef<[ComponentMetadata]>, + terms: QueryTerms<'terms>, + ) -> FlexibleQuery<'_, 'terms> { - FlexibleQuery::new(self, comp_metadata) + FlexibleQuery::new(self, terms) } /// Performs a single tick. @@ -482,14 +479,21 @@ impl World fn emit_event_by_id(&self, event_id: Uid) { - let query = self.flexible_query([ - ComponentMetadata::of::<SystemComponent>(), - ComponentMetadata { id: event_id, is_optional: false }, - ]); - - for (system,) in query - .iter::<()>() - .into_component_iter::<(&SystemComponent,)>(self) + //let query = self.flexible_query([ + // ComponentMetadata::of::<SystemComponent>(), + // ComponentMetadata { id: event_id, is_optional: false }, + //]); + + let mut query_required_ids = [SystemComponent::id(), event_id]; + + let query = self.flexible_query( + QueryTerms::builder() + .with_required_ids(&mut query_required_ids) + .build(), + ); + + for (system,) in + ComponentIter::<(&SystemComponent,), _>::new(self, query.iter::<()>()) { unsafe { system.system.run(self); |