fix: entrance manager exits not being managed properly
This commit is contained in:
		@@ -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);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user