Development Merge 2025.10.18 #4
@@ -3,7 +3,7 @@ using System.Collections.Generic;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace Engine.Core;
 | 
					namespace Engine.Core;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class ActiveBehaviourCollectorSorted<T> : ActiveBehaviourCollector<T> where T : class, IBehaviour
 | 
					public class ActiveBehaviourCollectorOrdered<T> : ActiveBehaviourCollector<T> where T : class, IBehaviour
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    private readonly Event<IBehaviour, IBehaviour.PriorityChangedArguments>.EventHandler delegateOnPriorityChanged = null!;
 | 
					    private readonly Event<IBehaviour, IBehaviour.PriorityChangedArguments>.EventHandler delegateOnPriorityChanged = null!;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -53,15 +53,10 @@ public class ActiveBehaviourCollectorSorted<T> : ActiveBehaviourCollector<T> whe
 | 
				
			|||||||
        AddBehaviour(behaviour);
 | 
					        AddBehaviour(behaviour);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public ActiveBehaviourCollectorSorted()
 | 
					    public ActiveBehaviourCollectorOrdered() => delegateOnPriorityChanged = OnPriorityChanged;
 | 
				
			||||||
 | 
					    public ActiveBehaviourCollectorOrdered(IUniverse universe, Comparison<T> sortBy) : base(universe)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        delegateOnPriorityChanged = OnPriorityChanged;
 | 
					        delegateOnPriorityChanged = OnPriorityChanged;
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public ActiveBehaviourCollectorSorted(IUniverse universe, Comparison<T> sortBy) : base(universe)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        delegateOnPriorityChanged = OnPriorityChanged;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        SortBy = Comparer<T>.Create(sortBy);
 | 
					        SortBy = Comparer<T>.Create(sortBy);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -3,7 +3,7 @@ using System.Collections.Generic;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace Engine.Core;
 | 
					namespace Engine.Core;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class BehaviourCollectorSorted<T> : BehaviourCollector<T> where T : class
 | 
					public class BehaviourCollectorOrdered<T> : BehaviourCollector<T> where T : class
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    private readonly Event<IBehaviour, IBehaviour.PriorityChangedArguments>.EventHandler delegateOnPriorityChanged = null!;
 | 
					    private readonly Event<IBehaviour, IBehaviour.PriorityChangedArguments>.EventHandler delegateOnPriorityChanged = null!;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -53,15 +53,10 @@ public class BehaviourCollectorSorted<T> : BehaviourCollector<T> where T : class
 | 
				
			|||||||
        AddBehaviour(behaviour);
 | 
					        AddBehaviour(behaviour);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public BehaviourCollectorSorted()
 | 
					    public BehaviourCollectorOrdered() => delegateOnPriorityChanged = OnPriorityChanged;
 | 
				
			||||||
 | 
					    public BehaviourCollectorOrdered(IUniverse universe, Comparison<T> sortBy) : base(universe)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        delegateOnPriorityChanged = OnPriorityChanged;
 | 
					        delegateOnPriorityChanged = OnPriorityChanged;
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public BehaviourCollectorSorted(IUniverse universe, Comparison<T> sortBy) : base(universe)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        delegateOnPriorityChanged = OnPriorityChanged;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        SortBy = Comparer<T>.Create(sortBy);
 | 
					        SortBy = Comparer<T>.Create(sortBy);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -7,9 +7,9 @@ public class DrawManager : Behaviour
 | 
				
			|||||||
    // We use Descending order because draw calls are running from last to first
 | 
					    // We use Descending order because draw calls are running from last to first
 | 
				
			||||||
    private static Comparer<IBehaviour> SortByDescendingPriority() => Comparer<IBehaviour>.Create((x, y) => y.Priority.CompareTo(x.Priority));
 | 
					    private static Comparer<IBehaviour> SortByDescendingPriority() => Comparer<IBehaviour>.Create((x, y) => y.Priority.CompareTo(x.Priority));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private readonly ActiveBehaviourCollectorSorted<IPreDraw> preDrawEntities = new() { SortBy = SortByDescendingPriority() };
 | 
					    private readonly ActiveBehaviourCollectorOrdered<IPreDraw> preDrawEntities = new() { SortBy = SortByDescendingPriority() };
 | 
				
			||||||
    private readonly ActiveBehaviourCollectorSorted<IDraw> drawEntities = new() { SortBy = SortByDescendingPriority() };
 | 
					    private readonly ActiveBehaviourCollectorOrdered<IDraw> drawEntities = new() { SortBy = SortByDescendingPriority() };
 | 
				
			||||||
    private readonly ActiveBehaviourCollectorSorted<IPostDraw> postDrawEntities = new() { SortBy = SortByDescendingPriority() };
 | 
					    private readonly ActiveBehaviourCollectorOrdered<IPostDraw> postDrawEntities = new() { SortBy = SortByDescendingPriority() };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private void OnPreDraw(IUniverse sender)
 | 
					    private void OnPreDraw(IUniverse sender)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,8 +7,8 @@ public class UniverseEntranceManager : Behaviour
 | 
				
			|||||||
    // We use Ascending order because we are using reverse for loop to call them
 | 
					    // We use Ascending order because we are using reverse for loop to call them
 | 
				
			||||||
    private static Comparer<IBehaviour> SortByAscendingPriority() => Comparer<IBehaviour>.Create((x, y) => x.Priority.CompareTo(y.Priority));
 | 
					    private static Comparer<IBehaviour> SortByAscendingPriority() => Comparer<IBehaviour>.Create((x, y) => x.Priority.CompareTo(y.Priority));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private readonly ActiveBehaviourCollectorSorted<IEnterUniverse> enterUniverses = new() { SortBy = SortByAscendingPriority() };
 | 
					    private readonly ActiveBehaviourCollectorOrdered<IEnterUniverse> enterUniverses = new() { SortBy = SortByAscendingPriority() };
 | 
				
			||||||
    private readonly ActiveBehaviourCollectorSorted<IExitUniverse> exitUniverses = new() { SortBy = SortByAscendingPriority() };
 | 
					    private readonly ActiveBehaviourCollectorOrdered<IExitUniverse> exitUniverses = new() { SortBy = 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);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,11 +8,11 @@ public class UpdateManager : Behaviour
 | 
				
			|||||||
    // We use Ascending order because we are using reverse for loop to call them
 | 
					    // We use Ascending order because we are using reverse for loop to call them
 | 
				
			||||||
    private static Comparer<IBehaviour> SortByAscendingPriority() => Comparer<IBehaviour>.Create((x, y) => x.Priority.CompareTo(y.Priority));
 | 
					    private static Comparer<IBehaviour> SortByAscendingPriority() => Comparer<IBehaviour>.Create((x, y) => x.Priority.CompareTo(y.Priority));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private readonly ActiveBehaviourCollectorSorted<IFirstFrameUpdate> firstFrameUpdates = new() { SortBy = SortByAscendingPriority() };
 | 
					    private readonly ActiveBehaviourCollectorOrdered<IFirstFrameUpdate> firstFrameUpdates = new() { SortBy = SortByAscendingPriority() };
 | 
				
			||||||
    private readonly ActiveBehaviourCollector<ILastFrameUpdate> lastFrameUpdates = new();
 | 
					    private readonly ActiveBehaviourCollector<ILastFrameUpdate> lastFrameUpdates = new();
 | 
				
			||||||
    private readonly ActiveBehaviourCollectorSorted<IPreUpdate> preUpdateEntities = new() { SortBy = SortByAscendingPriority() };
 | 
					    private readonly ActiveBehaviourCollectorOrdered<IPreUpdate> preUpdateEntities = new() { SortBy = SortByAscendingPriority() };
 | 
				
			||||||
    private readonly ActiveBehaviourCollectorSorted<IUpdate> updateEntities = new() { SortBy = SortByAscendingPriority() };
 | 
					    private readonly ActiveBehaviourCollectorOrdered<IUpdate> updateEntities = new() { SortBy = SortByAscendingPriority() };
 | 
				
			||||||
    private readonly ActiveBehaviourCollectorSorted<IPostUpdate> postUpdateEntities = new() { SortBy = SortByAscendingPriority() };
 | 
					    private readonly ActiveBehaviourCollectorOrdered<IPostUpdate> postUpdateEntities = new() { SortBy = SortByAscendingPriority() };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private readonly List<IFirstFrameUpdate> toCallFirstFrameUpdates = new(32);
 | 
					    private readonly List<IFirstFrameUpdate> toCallFirstFrameUpdates = new(32);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,7 @@ public class LoadContentManager : Behaviour, IFirstFrameUpdate
 | 
				
			|||||||
    // We use Ascending order because we are using reverse for loop to call them
 | 
					    // We use Ascending order because we are using reverse for loop to call them
 | 
				
			||||||
    private static Comparer<IBehaviour> SortByAscendingPriority() => Comparer<IBehaviour>.Create((x, y) => x.Priority.CompareTo(y.Priority));
 | 
					    private static Comparer<IBehaviour> SortByAscendingPriority() => Comparer<IBehaviour>.Create((x, y) => x.Priority.CompareTo(y.Priority));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private readonly ActiveBehaviourCollectorSorted<ILoadContent> loadContents = new() { SortBy = SortByAscendingPriority() };
 | 
					    private readonly ActiveBehaviourCollectorOrdered<ILoadContent> loadContents = new() { SortBy = SortByAscendingPriority() };
 | 
				
			||||||
    private readonly List<ILoadContent> toCallLoadContents = new(32);
 | 
					    private readonly List<ILoadContent> toCallLoadContents = new(32);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private MonoGameWindowContainer monoGameWindowContainer = null!;
 | 
					    private MonoGameWindowContainer monoGameWindowContainer = null!;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ public class SpriteBatcher : BehaviourBase, IFirstFrameUpdate, IDraw
 | 
				
			|||||||
    private ISpriteBatch spriteBatch = null!;
 | 
					    private ISpriteBatch spriteBatch = null!;
 | 
				
			||||||
    private MonoGameCamera2D camera2D = null!;
 | 
					    private MonoGameCamera2D camera2D = null!;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private readonly ActiveBehaviourCollectorSorted<IDrawableSprite> drawableSprites = new() { SortBy = SortByPriority() };
 | 
					    private readonly ActiveBehaviourCollectorOrdered<IDrawableSprite> drawableSprites = new() { SortBy = SortByPriority() };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void FirstActiveFrame()
 | 
					    public void FirstActiveFrame()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@ public class TriangleBatcher : BehaviourBase, ITriangleBatch, IFirstFrameUpdate,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    private TriangleBatch triangleBatch = null!;
 | 
					    private TriangleBatch triangleBatch = null!;
 | 
				
			||||||
    private MonoGameCamera2D camera2D = null!;
 | 
					    private MonoGameCamera2D camera2D = null!;
 | 
				
			||||||
    private readonly ActiveBehaviourCollectorSorted<IDrawableTriangle> drawableShapes = new() { SortBy = SortByAscendingPriority() };
 | 
					    private readonly ActiveBehaviourCollectorOrdered<IDrawableTriangle> drawableShapes = new() { SortBy = SortByAscendingPriority() };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void FirstActiveFrame()
 | 
					    public void FirstActiveFrame()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,10 +18,10 @@ public class PhysicsEngine2D : Behaviour, IPreUpdate, IPhysicsEngine2D
 | 
				
			|||||||
    protected readonly IRaycastResolver2D raycastResolver = null!;
 | 
					    protected readonly IRaycastResolver2D raycastResolver = null!;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static Comparer<IBehaviour> SortByPriority() => Comparer<IBehaviour>.Create((x, y) => y.Priority.CompareTo(x.Priority));
 | 
					    private static Comparer<IBehaviour> SortByPriority() => Comparer<IBehaviour>.Create((x, y) => y.Priority.CompareTo(x.Priority));
 | 
				
			||||||
    protected ActiveBehaviourCollectorSorted<IPrePhysicsUpdate> physicsPreUpdateCollector = new() { SortBy = SortByPriority() };
 | 
					    protected ActiveBehaviourCollectorOrdered<IPrePhysicsUpdate> physicsPreUpdateCollector = new() { SortBy = SortByPriority() };
 | 
				
			||||||
    protected ActiveBehaviourCollectorSorted<IPhysicsUpdate> physicsUpdateCollector = new() { SortBy = SortByPriority() };
 | 
					    protected ActiveBehaviourCollectorOrdered<IPhysicsUpdate> physicsUpdateCollector = new() { SortBy = SortByPriority() };
 | 
				
			||||||
    protected ActiveBehaviourCollectorSorted<IPhysicsIteration> physicsIterationCollector = new() { SortBy = SortByPriority() };
 | 
					    protected ActiveBehaviourCollectorOrdered<IPhysicsIteration> physicsIterationCollector = new() { SortBy = SortByPriority() };
 | 
				
			||||||
    protected ActiveBehaviourCollectorSorted<IPostPhysicsUpdate> physicsPostUpdateCollector = new() { SortBy = SortByPriority() };
 | 
					    protected ActiveBehaviourCollectorOrdered<IPostPhysicsUpdate> physicsPostUpdateCollector = new() { SortBy = SortByPriority() };
 | 
				
			||||||
    protected BehaviourCollector<IRigidBody2D> rigidBodyCollector = new();
 | 
					    protected BehaviourCollector<IRigidBody2D> rigidBodyCollector = new();
 | 
				
			||||||
    protected BehaviourCollector<ICollider2D> colliderCollector = new();
 | 
					    protected BehaviourCollector<ICollider2D> colliderCollector = new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user