chore: standalone physics engine not having pooled lists fixed

This commit is contained in:
Syntriax 2025-06-09 20:27:29 +03:00
parent 29a7f5880f
commit f56d6a7fc8

View File

@ -21,6 +21,12 @@ public class PhysicsEngine2DStandalone : IPhysicsEngine2D
private readonly ICollisionResolver2D collisionResolver = null!; private readonly ICollisionResolver2D collisionResolver = null!;
private readonly IRaycastResolver2D raycastResolver = null!; private readonly IRaycastResolver2D raycastResolver = null!;
private readonly ListPool<ICollider2D> colliderPool = new(() => new(32));
private readonly ListPool<IPrePhysicsUpdate> prePhysicsUpdatePool = new(() => new(32));
private readonly ListPool<IPhysicsUpdate> physicsUpdatePool = new(() => new(32));
private readonly ListPool<IPhysicsIteration> physicsIterationPool = new(() => new(32));
private readonly ListPool<IPostPhysicsUpdate> postPhysicsUpdatePool = new(() => new(32));
public int IterationPerStep { get => _iterationCount; set => _iterationCount = value < 1 ? 1 : value; } public int IterationPerStep { get => _iterationCount; set => _iterationCount = value < 1 ? 1 : value; }
public void AddRigidBody(IRigidBody2D rigidBody) public void AddRigidBody(IRigidBody2D rigidBody)
@ -112,11 +118,11 @@ public class PhysicsEngine2DStandalone : IPhysicsEngine2D
{ {
float intervalDeltaTime = deltaTime / IterationPerStep; float intervalDeltaTime = deltaTime / IterationPerStep;
List<ICollider2D> childColliders = []; List<ICollider2D> childColliders = colliderPool.Get();
List<IPrePhysicsUpdate> physicsPreUpdates = []; List<IPrePhysicsUpdate> physicsPreUpdates = prePhysicsUpdatePool.Get();
List<IPhysicsUpdate> physicsUpdates = []; List<IPhysicsUpdate> physicsUpdates = physicsUpdatePool.Get();
List<IPhysicsIteration> physicsIterations = []; List<IPhysicsIteration> physicsIterations = physicsIterationPool.Get();
List<IPostPhysicsUpdate> physicsPostUpdates = []; List<IPostPhysicsUpdate> physicsPostUpdates = postPhysicsUpdatePool.Get();
rigidBody.BehaviourController.GetBehavioursInChildren(childColliders); rigidBody.BehaviourController.GetBehavioursInChildren(childColliders);
rigidBody.BehaviourController.GetBehavioursInChildren(physicsPreUpdates); rigidBody.BehaviourController.GetBehavioursInChildren(physicsPreUpdates);
@ -160,6 +166,12 @@ public class PhysicsEngine2DStandalone : IPhysicsEngine2D
for (int i = physicsPostUpdates.Count - 1; i >= 0; i--) for (int i = physicsPostUpdates.Count - 1; i >= 0; i--)
physicsPostUpdates[i].PostPhysicsUpdate(deltaTime); physicsPostUpdates[i].PostPhysicsUpdate(deltaTime);
colliderPool.Return(childColliders);
prePhysicsUpdatePool.Return(physicsPreUpdates);
physicsUpdatePool.Return(physicsUpdates);
physicsIterationPool.Return(physicsIterations);
postPhysicsUpdatePool.Return(physicsPostUpdates);
} }
private void ResolveColliders(ICollider2D colliderX, ICollider2D colliderY) private void ResolveColliders(ICollider2D colliderX, ICollider2D colliderY)