fix: entrance manager exits not being managed properly

This commit is contained in:
2025-11-01 23:27:55 +03:00
parent 5f019892f1
commit f28307be80

View File

@@ -9,7 +9,6 @@ public class UniverseEntranceManager : Internal.BehaviourIndependent
private static System.Func<IBehaviour, int> GetPriority() => (b) => b.Priority; private static System.Func<IBehaviour, int> GetPriority() => (b) => b.Priority;
private readonly ActiveBehaviourCollectorOrdered<int, IEnterUniverse> enterUniverses = new(GetPriority(), SortByAscendingPriority()); private readonly ActiveBehaviourCollectorOrdered<int, IEnterUniverse> enterUniverses = new(GetPriority(), SortByAscendingPriority());
private readonly ActiveBehaviourCollectorOrdered<int, IExitUniverse> exitUniverses = new(GetPriority(), SortByAscendingPriority());
private readonly List<IEnterUniverse> toCallEnterUniverses = new(32); private readonly List<IEnterUniverse> toCallEnterUniverses = new(32);
private readonly List<IExitUniverse> toCallExitUniverses = new(32); private readonly List<IExitUniverse> toCallExitUniverses = new(32);
@@ -21,7 +20,6 @@ public class UniverseEntranceManager : Internal.BehaviourIndependent
// event it tries to call OnUniverseObjectRegistered again on the same object, causing a duplicate entry error. // event it tries to call OnUniverseObjectRegistered again on the same object, causing a duplicate entry error.
Debug.Assert.AssertTrue(BehaviourController.Count == 1, $"{nameof(UniverseEntranceManager)} must be in it's own {nameof(IUniverseObject)} with no other {nameof(IBehaviour)}s attached at the moment. Failing to do so might cause instantiation or serialization issues."); Debug.Assert.AssertTrue(BehaviourController.Count == 1, $"{nameof(UniverseEntranceManager)} must be in it's own {nameof(IUniverseObject)} with no other {nameof(IBehaviour)}s attached at the moment. Failing to do so might cause instantiation or serialization issues.");
enterUniverses.Assign(universe); enterUniverses.Assign(universe);
exitUniverses.Assign(universe);
foreach (IUniverseObject universeObject in universe) foreach (IUniverseObject universeObject in universe)
OnUniverseObjectRegistered(universe, new(universeObject)); OnUniverseObjectRegistered(universe, new(universeObject));
@@ -33,7 +31,6 @@ public class UniverseEntranceManager : Internal.BehaviourIndependent
protected override void OnExitedUniverse(IUniverse universe) protected override void OnExitedUniverse(IUniverse universe)
{ {
enterUniverses.Unassign(); enterUniverses.Unassign();
exitUniverses.Unassign();
foreach (IUniverseObject universeObject in universe) foreach (IUniverseObject universeObject in universe)
OnUniverseObjectUnRegistered(universe, new(universeObject)); OnUniverseObjectUnRegistered(universe, new(universeObject));
@@ -44,6 +41,8 @@ public class UniverseEntranceManager : Internal.BehaviourIndependent
private void OnUniverseObjectUnRegistered(IUniverse sender, IUniverse.UniverseObjectUnRegisteredArguments args) private void OnUniverseObjectUnRegistered(IUniverse sender, IUniverse.UniverseObjectUnRegisteredArguments args)
{ {
args.UniverseObjectUnregistered.BehaviourController.GetBehavioursInChildren(toCallExitUniverses);
for (int i = toCallExitUniverses.Count - 1; i >= 0; i--) for (int i = toCallExitUniverses.Count - 1; i >= 0; i--)
{ {
IExitUniverse exitUniverse = toCallExitUniverses[i]; IExitUniverse exitUniverse = toCallExitUniverses[i];
@@ -67,14 +66,8 @@ public class UniverseEntranceManager : Internal.BehaviourIndependent
toCallEnterUniverses.Add(args.BehaviourCollected); toCallEnterUniverses.Add(args.BehaviourCollected);
} }
private void OnExitUniverseCollected(IBehaviourCollector<IExitUniverse> sender, IBehaviourCollector<IExitUniverse>.BehaviourCollectedArguments args)
{
toCallExitUniverses.Add(args.BehaviourCollected);
}
public UniverseEntranceManager() public UniverseEntranceManager()
{ {
enterUniverses.OnCollected.AddListener(OnEnterUniverseCollected); enterUniverses.OnCollected.AddListener(OnEnterUniverseCollected);
exitUniverses.OnCollected.AddListener(OnExitUniverseCollected);
} }
} }