From 4c4dd2b8bfa4655acbf03967f274e76440ec9530 Mon Sep 17 00:00:00 2001 From: HampusM Date: Mon, 17 Aug 2026 14:46:14 +0200 Subject: feat(engine-ecs): add query traversal kind SelfOrUp --- engine-ecs/src/query/term.rs | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'engine-ecs/src/query') 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 {} -- cgit v1.2.3-18-g5258