diff options
Diffstat (limited to 'engine-ecs/src/pair.rs')
| -rw-r--r-- | engine-ecs/src/pair.rs | 61 |
1 files changed, 36 insertions, 25 deletions
diff --git a/engine-ecs/src/pair.rs b/engine-ecs/src/pair.rs index 834077c..efeead9 100644 --- a/engine-ecs/src/pair.rs +++ b/engine-ecs/src/pair.rs @@ -8,6 +8,8 @@ use crate::component::{ HandleMut as ComponentHandleMut, IntoParts as IntoComponentParts, Parts as ComponentParts, + Removable as RemovableComponent, + WithAssociatedId as ComponentWithAssociatedId, }; use crate::entity::{ Handle as EntityHandle, @@ -21,7 +23,7 @@ use crate::query::{ TermsBuilderInterface, }; use crate::reflection::Type as TypeReflection; -use crate::uid::{PairParams as UidPairParams, Uid, With as WithUid}; +use crate::uid::{PairParams as UidPairParams, Uid}; use crate::util::impl_multiple; use crate::{Component, EntityComponentRef, World}; @@ -265,7 +267,7 @@ where _term_metadata: QueryTermMetadata, ) { - terms_builder.present([Pair::<Relation, Target>::uid()]); + terms_builder.present([Pair::<Relation, Target>::id()]); } fn fields( @@ -276,7 +278,7 @@ where { let target_component = search_result .entity_handle - .get_matching_components(Pair::<Relation, Target>::uid()) + .get_matching_components(Pair::<Relation, Target>::id()) .next() .expect("Not possible"); @@ -308,7 +310,7 @@ where _term_metadata: QueryTermMetadata, ) { - terms_builder.present([Pair::<Relation, Target>::uid()]); + terms_builder.present([Pair::<Relation, Target>::id()]); } fn fields( @@ -319,7 +321,7 @@ where { let target_component = search_result .entity_handle - .get_matching_components(Pair::<Relation, Target>::uid()) + .get_matching_components(Pair::<Relation, Target>::id()) .next() .expect("Not possible"); @@ -355,7 +357,7 @@ where _term_metadata: QueryTermMetadata, ) { - terms_builder.present([Self::uid()]); + terms_builder.present([Self::id()]); } fn fields( @@ -366,7 +368,7 @@ where { let first_matching_comp = search_result .entity_handle - .get_matching_components(Self::uid()) + .get_matching_components(Self::id()) .next() .expect("Not possible"); @@ -378,12 +380,12 @@ where } } -impl<Relation, Target> WithUid for Pair<Relation, Target> +impl<Relation, Target> ComponentWithAssociatedId for Pair<Relation, Target> where Relation: Component, Target: Component, { - fn uid() -> Uid + fn id() -> Uid { Uid::new_pair(&UidPairParams { relation: Relation::id(), @@ -392,15 +394,28 @@ where } } -impl<Relation> WithUid for Pair<Relation, Wildcard> +impl<Relation, Target> RemovableComponent for Pair<Relation, Target> where Relation: Component, + Target: Component, { - fn uid() -> Uid +} + +// TODO: Implement RemovableComponent for Pair<Relation, Wildcard> +// and Pair<Wildcard, Target>. +// +// This should only be done after removal of wildcard pairs is added in lib.rs + +impl<Relation> Pair<Relation, Wildcard> +where + Relation: Component, +{ + #[must_use] + pub fn id() -> Uid { Uid::new_pair(&UidPairParams { relation: Relation::id(), - target: Wildcard::uid(), + target: Wildcard::id(), }) } } @@ -464,19 +479,17 @@ impl<'query, Relation, Target> WithWildcard<'query, Relation, Target> assert!(component_id.is_pair()); assert!( - Relation::uid() == Wildcard::uid() + Relation::uid() == Wildcard::id() || component_id.relation() == Relation::uid() ); assert!( - Target::uid() == Wildcard::uid() || component_id.target() == Target::uid() + Target::uid() == Wildcard::id() || component_id.target() == Target::uid() ); - assert!(Relation::uid() == Wildcard::uid() || Target::uid() == Wildcard::uid()); + assert!(Relation::uid() == Wildcard::id() || Target::uid() == Wildcard::id()); - assert!( - !(Relation::uid() == Wildcard::uid() && Target::uid() == Wildcard::uid()) - ); + assert!(!(Relation::uid() == Wildcard::id() && Target::uid() == Wildcard::id())); WithWildcard { world, @@ -641,11 +654,9 @@ impl<'query, Relation, Target> MultipleWithWildcard<'query, Relation, Target> Relation: ComponentOrWildcard, Target: ComponentOrWildcard, { - assert!(Relation::uid() == Wildcard::uid() || Target::uid() == Wildcard::uid()); + assert!(Relation::uid() == Wildcard::id() || Target::uid() == Wildcard::id()); - assert!( - !(Relation::uid() == Wildcard::uid() && Target::uid() == Wildcard::uid()) - ); + assert!(!(Relation::uid() == Wildcard::id() && Target::uid() == Wildcard::id())); MultipleWithWildcard { entity_handle, @@ -691,7 +702,7 @@ impl<'a, Relation: Component> IntoIterator WithWildcardIter { inner: self .entity_handle - .get_matching_components(Pair::<Relation, Wildcard>::uid()), + .get_matching_components(Pair::<Relation, Wildcard>::id()), world: self.world, _pd: PhantomData, } @@ -736,7 +747,7 @@ pub struct Wildcard(Infallible); impl Wildcard { #[must_use] - pub fn uid() -> Uid + pub fn id() -> Uid { Uid::wildcard() } @@ -761,7 +772,7 @@ impl ComponentOrWildcard for Wildcard { fn uid() -> Uid { - Wildcard::uid() + Wildcard::id() } } |
