chore: standalone physics engine not having pooled lists fixed
This commit is contained in:
parent
29a7f5880f
commit
f56d6a7fc8
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user