summaryrefslogtreecommitdiff
path: root/engine-ecs/src/query
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2026-08-17 14:46:14 +0200
committerHampusM <hampus@hampusmat.com>2026-08-17 14:46:14 +0200
commit4c4dd2b8bfa4655acbf03967f274e76440ec9530 (patch)
treeec635a0d2dce3d49d4564f21cb2a9058190e88f4 /engine-ecs/src/query
parent11efaee7b80c5c9b8227d265874842da9a5f85fd (diff)
feat(engine-ecs): add query traversal kind SelfOrUp
Diffstat (limited to 'engine-ecs/src/query')
-rw-r--r--engine-ecs/src/query/term.rs26
1 files changed, 23 insertions, 3 deletions
diff --git a/engine-ecs/src/query/term.rs b/engine-ecs/src/query/term.rs
index 1bcb3dd..453a750 100644
--- a/engine-ecs/src/query/term.rs
+++ b/engine-ecs/src/query/term.rs
@@ -7,6 +7,7 @@ use crate::component::{
HandleMut as ComponentHandleMut,
};
use crate::query::{
+ FoundByTraversal,
SearchResult,
Term,
TermMetadata,
@@ -212,14 +213,21 @@ where
unreachable!();
};
- let Some(found_ent) = world.get_entity(traversal_result.found_ent) else {
- unreachable!();
+ let ent = match traversal_result.found {
+ FoundByTraversal::SelfEntity => search_result.entity_handle.clone(),
+ FoundByTraversal::OtherEntity(found_ent_id) => {
+ let Some(found_ent) = world.get_entity(found_ent_id) else {
+ unreachable!();
+ };
+
+ found_ent
+ }
};
TermsT::get_fields(
world,
&SearchResult {
- entity_handle: found_ent,
+ entity_handle: ent,
traversal_results: search_result.traversal_results,
},
term_metadata
@@ -247,6 +255,18 @@ impl TraversalKindType for TraverseUp
impl sealed::Sealed for TraverseUp {}
+pub struct TraverseSelfOrUp;
+
+impl TraversalKindType for TraverseSelfOrUp
+{
+ fn traversal_kind() -> TraversalKind
+ {
+ TraversalKind::SelfOrUp
+ }
+}
+
+impl sealed::Sealed for TraverseSelfOrUp {}
+
mod sealed
{
pub trait Sealed {}