From 4081693d3212952caffd06be409c7cef518ab883 Mon Sep 17 00:00:00 2001 From: Syntriax Date: Fri, 11 Apr 2025 23:28:46 +0300 Subject: [PATCH] fix: removing an object from hierarchy setting all children's parents null --- Engine.Core/GameManager.cs | 7 ++++++- Engine.Core/HierarchyObject.cs | 1 - Engine.Core/Transform2D.cs | 2 -- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Engine.Core/GameManager.cs b/Engine.Core/GameManager.cs index 5aa3bd0..d86e993 100644 --- a/Engine.Core/GameManager.cs +++ b/Engine.Core/GameManager.cs @@ -68,6 +68,12 @@ public class GameManager : BaseEntity, IGameManager } public void Remove(IHierarchyObject hierarchyObject) + { + hierarchyObject.SetParent(null); + RemoveIncursive(hierarchyObject); + } + + private void RemoveIncursive(IHierarchyObject hierarchyObject) { if (!_hierarchyObjects.Contains(hierarchyObject)) throw new Exception($"{nameof(IHierarchyObject)} named {hierarchyObject.Name} is not registered to the {nameof(GameManager)}."); @@ -79,7 +85,6 @@ public class GameManager : BaseEntity, IGameManager Remove(hierarchyObject.Children[i]); _hierarchyObjects.Remove(hierarchyObject); - hierarchyObject.SetParent(null); if (!hierarchyObject.ExitHierarchy()) throw new Exception($"{hierarchyObject.Name} can't exit the hierarchy"); diff --git a/Engine.Core/HierarchyObject.cs b/Engine.Core/HierarchyObject.cs index c9fb225..87316f8 100644 --- a/Engine.Core/HierarchyObject.cs +++ b/Engine.Core/HierarchyObject.cs @@ -64,7 +64,6 @@ public class HierarchyObject : BaseEntity, IHierarchyObject OnExitingHierarchy(gameManager); _gameManager = null!; - SetParent(null); OnExitedHierarchy?.Invoke(this, gameManager); return true; } diff --git a/Engine.Core/Transform2D.cs b/Engine.Core/Transform2D.cs index 176efd3..b2a1eb1 100644 --- a/Engine.Core/Transform2D.cs +++ b/Engine.Core/Transform2D.cs @@ -220,7 +220,6 @@ public class Transform2D : Behaviour, ITransform2D ITransform2D? previousParent = parentTransform; if (previousParent is not null) { - previousParent.BehaviourController.HierarchyObject.RemoveChild(HierarchyObject); previousParent.OnPositionChanged -= RecalculatePosition; previousParent.OnScaleChanged -= RecalculateScale; previousParent.OnRotationChanged -= RecalculateRotation; @@ -232,7 +231,6 @@ public class Transform2D : Behaviour, ITransform2D if (parentTransform is not null) { - parentTransform.BehaviourController.HierarchyObject.AddChild(HierarchyObject); parentTransform.OnPositionChanged += RecalculatePosition; parentTransform.OnScaleChanged += RecalculateScale; parentTransform.OnRotationChanged += RecalculateRotation;