From 723f48d8e008d216978b8ed7d70499c972cc5a1c Mon Sep 17 00:00:00 2001 From: HampusM Date: Fri, 30 Oct 2026 05:24:39 +0100 Subject: refactor(engine-ecs): replace uid::WithUid* traits with new component traits --- engine-ecs/src/query/term.rs | 113 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 100 insertions(+), 13 deletions(-) (limited to 'engine-ecs/src/query/term.rs') diff --git a/engine-ecs/src/query/term.rs b/engine-ecs/src/query/term.rs index 980ee87..f5fd531 100644 --- a/engine-ecs/src/query/term.rs +++ b/engine-ecs/src/query/term.rs @@ -5,7 +5,9 @@ use crate::component::{ Component, Handle as ComponentHandle, HandleMut as ComponentHandleMut, + WithAssociatedId as _, }; +use crate::pair::{Pair, Wildcard}; use crate::query::{ FoundByTraversal, SearchResult, @@ -17,19 +19,61 @@ use crate::query::{ Traversal, TraversalKind, }; -use crate::uid::With as WithUid; use crate::World; -pub struct With +pub struct With +{ + _pd: PhantomData, +} + +impl<'query, ComponentT: Component> Term<'query> for With +{ + type Fields = (); + + fn apply_to_terms_builder( + terms_builder: &mut TermsBuilder, + _term_metadata: TermMetadata, + ) + { + terms_builder.present([ComponentT::id()]); + } + + fn fields( + _world: &'query World, + _search_result: &SearchResult<'query, '_>, + _term_metadata: TermMetadata, + ) -> Self::Fields + { + } +} + +impl<'query, Relation, Target> Term<'query> for With> where - WithUidT: WithUid, + Relation: Component, + Target: Component, { - _pd: PhantomData, + type Fields = (); + + fn apply_to_terms_builder( + terms_builder: &mut TermsBuilder, + _term_metadata: TermMetadata, + ) + { + terms_builder.present([Pair::::id()]); + } + + fn fields( + _world: &'query World, + _search_result: &SearchResult<'query, '_>, + _term_metadata: TermMetadata, + ) -> Self::Fields + { + } } -impl<'query, WithUidT> Term<'query> for With +impl<'query, Relation> Term<'query> for With> where - WithUidT: WithUid, + Relation: Component, { type Fields = (); @@ -38,7 +82,7 @@ where _term_metadata: TermMetadata, ) { - terms_builder.present([WithUidT::uid()]); + terms_builder.present([Pair::::id()]); } fn fields( @@ -50,16 +94,59 @@ where } } -pub struct Without +pub struct Without +{ + _pd: PhantomData, +} + +impl<'query, ComponentT: Component> Term<'query> for Without +{ + type Fields = (); + + fn apply_to_terms_builder( + terms_builder: &mut TermsBuilder, + _term_metadata: TermMetadata, + ) + { + terms_builder.absent([ComponentT::id()]); + } + + fn fields( + _world: &'query World, + _search_result: &SearchResult<'query, '_>, + _term_metadata: TermMetadata, + ) -> Self::Fields + { + } +} + +impl<'query, Relation, Target> Term<'query> for Without> where - WithUidT: WithUid, + Relation: Component, + Target: Component, { - _pd: PhantomData, + type Fields = (); + + fn apply_to_terms_builder( + terms_builder: &mut TermsBuilder, + _term_metadata: TermMetadata, + ) + { + terms_builder.absent([Pair::::id()]); + } + + fn fields( + _world: &'query World, + _search_result: &SearchResult<'query, '_>, + _term_metadata: TermMetadata, + ) -> Self::Fields + { + } } -impl<'query, WithUidT> Term<'query> for Without +impl<'query, Relation> Term<'query> for Without> where - WithUidT: WithUid, + Relation: Component, { type Fields = (); @@ -68,7 +155,7 @@ where _term_metadata: TermMetadata, ) { - terms_builder.absent([WithUidT::uid()]); + terms_builder.absent([Pair::::id()]); } fn fields( -- cgit v1.2.3-18-g5258