5 Commits

4 changed files with 17 additions and 11 deletions

View File

@@ -5,6 +5,12 @@ using Engine.Core.Debug;
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>
/// Represents a simple event with no parameters.
/// <para>Example usage:</para>

View File

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

View File

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

View File

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