From 2d5d3956e5a6410959f0ebcf74b7965063095b35 Mon Sep 17 00:00:00 2001 From: Aevyrie Roessler Date: Fri, 28 Feb 2025 20:38:55 -0800 Subject: [PATCH] Don't skip entities if the dirty bit was added. --- crates/bevy_transform/src/systems.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/crates/bevy_transform/src/systems.rs b/crates/bevy_transform/src/systems.rs index 3a1ef5caf3..a4ea36fa51 100644 --- a/crates/bevy_transform/src/systems.rs +++ b/crates/bevy_transform/src/systems.rs @@ -1,6 +1,5 @@ use crate::components::{GlobalTransform, Transform, TransformTreeChanged}; use bevy_ecs::prelude::*; -use derive_more::From; #[cfg(feature = "std")] pub use parallel::propagate_parent_transforms; #[cfg(not(feature = "std"))] @@ -55,11 +54,13 @@ pub fn mark_dirty_trees( for entity in changed_transforms.iter().chain(orphaned.read()) { let mut next = entity; while let Ok((parent, mut tree)) = transforms.get_mut(next) { - if tree.is_changed() { - break; // Tree has already been processed + if tree.is_changed() && !tree.is_added() { + // If the component was changed, this part of the tree has already been processed. + // Ignore this if the change was caused by the component being added. + break; } tree.set_changed(); - if let Some(parent) = parent.map(ChildOf::get) { + if let Some(parent) = parent.map(|p| p.parent) { next = parent; } else { break;