summaryrefslogtreecommitdiff
path: root/engine-ecs/src/pair.rs
diff options
context:
space:
mode:
Diffstat (limited to 'engine-ecs/src/pair.rs')
-rw-r--r--engine-ecs/src/pair.rs61
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()
}
}