5 Commits

4 changed files with 17 additions and 11 deletions

View File

@@ -5,6 +5,12 @@ using Engine.Core.Debug;
namespace Engine.Core; namespace Engine.Core;
// TODO!: every reverse loop has a chance to have more than 1 unsubscription,
// for (int i = listeners.Count - 1; i >= 0; i--)
// can be replaced with
// for (int i = listeners.Count - 1; i >= 0; i = Math.Min(i - 1, listeners.Count - 1))
// but this would causes possible double calls on already called callbacks, find a better method.
/// <summary> /// <summary>
/// Represents a simple event with no parameters. /// Represents a simple event with no parameters.
/// <para>Example usage:</para> /// <para>Example usage:</para>

View File

@@ -17,8 +17,8 @@ public class UniverseEntranceManager : Behaviour
{ {
enterUniverses.Assign(universe); enterUniverses.Assign(universe);
foreach (IUniverseObject universeObject in Universe.UniverseObjects) foreach (IUniverseObject universeObject in universe.UniverseObjects)
OnUniverseObjectRegistered(Universe, new(universeObject)); OnUniverseObjectRegistered(universe, new(universeObject));
universe.OnUniverseObjectRegistered.AddListener(OnUniverseObjectRegistered); universe.OnUniverseObjectRegistered.AddListener(OnUniverseObjectRegistered);
universe.OnUniverseObjectUnRegistered.AddListener(OnUniverseObjectUnRegistered); universe.OnUniverseObjectUnRegistered.AddListener(OnUniverseObjectUnRegistered);
@@ -28,8 +28,8 @@ public class UniverseEntranceManager : Behaviour
{ {
enterUniverses.Unassign(); enterUniverses.Unassign();
foreach (IUniverseObject universeObject in Universe.UniverseObjects) foreach (IUniverseObject universeObject in universe.UniverseObjects)
OnUniverseObjectUnRegistered(Universe, new(universeObject)); OnUniverseObjectUnRegistered(universe, new(universeObject));
universe.OnUniverseObjectRegistered.RemoveListener(OnUniverseObjectRegistered); universe.OnUniverseObjectRegistered.RemoveListener(OnUniverseObjectRegistered);
universe.OnUniverseObjectUnRegistered.RemoveListener(OnUniverseObjectUnRegistered); universe.OnUniverseObjectUnRegistered.RemoveListener(OnUniverseObjectUnRegistered);

View File

@@ -120,8 +120,8 @@ public class Universe : BaseEntity, IUniverse
protected override void FinalizeInternal() protected override void FinalizeInternal()
{ {
base.FinalizeInternal(); base.FinalizeInternal();
for (int i = UniverseObjects.Count; i >= 0; i--) for (int i = UniverseObjects.Count - 1; i >= 0; i--)
UniverseObjects[i].Finalize(); Remove(UniverseObjects[i]);
} }
public void Update(UniverseTime engineTime) public void Update(UniverseTime engineTime)

View File

@@ -100,14 +100,14 @@ public class UniverseObject : BaseEntity, IUniverseObject
return true; return true;
} }
public void AddChild(IUniverseObject parent) public void AddChild(IUniverseObject child)
{ {
if (_children.Contains(parent)) if (_children.Contains(child))
return; return;
_children.Add(parent); _children.Add(child);
parent.Parent = this; child.Parent = this;
OnChildrenAdded?.Invoke(this, new(parent)); OnChildrenAdded?.Invoke(this, new(child));
} }
public void RemoveChild(IUniverseObject child) public void RemoveChild(IUniverseObject child)