diff options
| author | HampusM <hampus@hampusmat.com> | 2026-08-17 14:46:14 +0200 |
|---|---|---|
| committer | HampusM <hampus@hampusmat.com> | 2026-08-17 14:46:14 +0200 |
| commit | 4c4dd2b8bfa4655acbf03967f274e76440ec9530 (patch) | |
| tree | ec635a0d2dce3d49d4564f21cb2a9058190e88f4 /engine-ecs/src/query | |
| parent | 11efaee7b80c5c9b8227d265874842da9a5f85fd (diff) | |
feat(engine-ecs): add query traversal kind SelfOrUp
Diffstat (limited to 'engine-ecs/src/query')
| -rw-r--r-- | engine-ecs/src/query/term.rs | 26 |
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 {} |
