From a51a156cd19e5c5746a9391685310b66cbb78d5d Mon Sep 17 00:00:00 2001 From: HampusM Date: Tue, 21 Jul 2026 17:16:09 +0200 Subject: feat(engine-ecs): check phase parents on init --- engine-ecs/src/phase.rs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'engine-ecs/src/phase.rs') diff --git a/engine-ecs/src/phase.rs b/engine-ecs/src/phase.rs index f789120..cccf978 100644 --- a/engine-ecs/src/phase.rs +++ b/engine-ecs/src/phase.rs @@ -1,3 +1,6 @@ +#[cfg(debug_assertions)] +use crate::entity::Name as EntityName; +use crate::{Query, pair::{ChildOf, Pair, Wildcard}, query::term::With}; use crate::{declare_entity, Component, World}; #[derive(Debug, Default, Clone, Copy, Component)] @@ -32,3 +35,37 @@ pub(crate) fn spawn_standard_phases(world: &mut World) #[derive(Debug, Component)] pub(crate) struct HasSystem; + + +#[cfg(debug_assertions)] +pub(crate) fn check_parents(phase_query: Query<(Pair, Option<&EntityName>), (With,)>) +{ + for (child_of, ent_name) in &phase_query { + let Some(parent_ent) = child_of.get_target_ent() else { + tracing::warn!( + phase_entity=ent_name + .as_ref() + .map(|ent_name| ent_name.name.as_ref()) + .unwrap_or(""), + "Parent entity of phase entity does not exist" + ); + continue; + }; + + if !parent_ent.has_component(Phase::id()) { + let parent_ent_name = parent_ent.get::(); + + tracing::warn!( + phase_entity=ent_name + .as_ref() + .map(|ent_name| ent_name.name.as_ref()) + .unwrap_or(""), + parent_entity=parent_ent_name + .as_ref() + .map(|parent_ent_name| parent_ent_name.name.as_ref()) + .unwrap_or(""), + "Parent entity of phase entity is not a phase (missing Phase component)" + ); + } + } +} -- cgit v1.2.3-18-g5258