summaryrefslogtreecommitdiff
path: root/ecs/src/lib.rs
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2025-03-18 16:59:53 +0100
committerHampusM <hampus@hampusmat.com>2025-03-19 20:24:12 +0100
commit76e7e612e7b516bf52b508ae5bb367b1ddc3babc (patch)
tree1975b4db0eecb74583ab78e58afa50b5326347b2 /ecs/src/lib.rs
parent44cd47fd67102902b649c98b85c5abb9a0da39f8 (diff)
refactor(ecs): replace component::RefSequence with query terms
Diffstat (limited to 'ecs/src/lib.rs')
-rw-r--r--ecs/src/lib.rs50
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);