summaryrefslogtreecommitdiff
path: root/engine-ecs/src
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2026-07-21 17:16:09 +0200
committerHampusM <hampus@hampusmat.com>2026-07-21 17:16:09 +0200
commita51a156cd19e5c5746a9391685310b66cbb78d5d (patch)
tree4e5135e9dce8891c4ea5bea484e0881e78072f7f /engine-ecs/src
parentf8e9fc157a205451607ddff6975027b3573c3934 (diff)
feat(engine-ecs): check phase parents on init
Diffstat (limited to 'engine-ecs/src')
-rw-r--r--engine-ecs/src/lib.rs3
-rw-r--r--engine-ecs/src/phase.rs37
2 files changed, 40 insertions, 0 deletions
diff --git a/engine-ecs/src/lib.rs b/engine-ecs/src/lib.rs
index 6656440..f0e3e36 100644
--- a/engine-ecs/src/lib.rs
+++ b/engine-ecs/src/lib.rs
@@ -115,6 +115,9 @@ impl World
crate::phase::spawn_standard_phases(&mut world);
+ #[cfg(debug_assertions)]
+ world.register_system(*INIT_PHASE, crate::phase::check_parents);
+
crate::error::set_panic_hook();
world
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<ChildOf, Wildcard>, Option<&EntityName>), (With<Phase>,)>)
+{
+ 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("<unnamed>"),
+ "Parent entity of phase entity does not exist"
+ );
+ continue;
+ };
+
+ if !parent_ent.has_component(Phase::id()) {
+ let parent_ent_name = parent_ent.get::<EntityName>();
+
+ tracing::warn!(
+ phase_entity=ent_name
+ .as_ref()
+ .map(|ent_name| ent_name.name.as_ref())
+ .unwrap_or("<unnamed>"),
+ parent_entity=parent_ent_name
+ .as_ref()
+ .map(|parent_ent_name| parent_ent_name.name.as_ref())
+ .unwrap_or("<unnamed>"),
+ "Parent entity of phase entity is not a phase (missing Phase component)"
+ );
+ }
+ }
+}