From f56d6a7fc8dc7aae290fd28ae995c9e40016373b Mon Sep 17 00:00:00 2001 From: Syntriax Date: Mon, 9 Jun 2025 20:27:29 +0300 Subject: [PATCH] chore: standalone physics engine not having pooled lists fixed --- Engine.Physics2D/PhysicsEngine2DStandalone.cs | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/Engine.Physics2D/PhysicsEngine2DStandalone.cs b/Engine.Physics2D/PhysicsEngine2DStandalone.cs index dc16d4c..5998f04 100644 --- a/Engine.Physics2D/PhysicsEngine2DStandalone.cs +++ b/Engine.Physics2D/PhysicsEngine2DStandalone.cs @@ -21,6 +21,12 @@ public class PhysicsEngine2DStandalone : IPhysicsEngine2D private readonly ICollisionResolver2D collisionResolver = null!; private readonly IRaycastResolver2D raycastResolver = null!; + private readonly ListPool colliderPool = new(() => new(32)); + private readonly ListPool prePhysicsUpdatePool = new(() => new(32)); + private readonly ListPool physicsUpdatePool = new(() => new(32)); + private readonly ListPool physicsIterationPool = new(() => new(32)); + private readonly ListPool postPhysicsUpdatePool = new(() => new(32)); + public int IterationPerStep { get => _iterationCount; set => _iterationCount = value < 1 ? 1 : value; } public void AddRigidBody(IRigidBody2D rigidBody) @@ -112,11 +118,11 @@ public class PhysicsEngine2DStandalone : IPhysicsEngine2D { float intervalDeltaTime = deltaTime / IterationPerStep; - List childColliders = []; - List physicsPreUpdates = []; - List physicsUpdates = []; - List physicsIterations = []; - List physicsPostUpdates = []; + List childColliders = colliderPool.Get(); + List physicsPreUpdates = prePhysicsUpdatePool.Get(); + List physicsUpdates = physicsUpdatePool.Get(); + List physicsIterations = physicsIterationPool.Get(); + List physicsPostUpdates = postPhysicsUpdatePool.Get(); rigidBody.BehaviourController.GetBehavioursInChildren(childColliders); rigidBody.BehaviourController.GetBehavioursInChildren(physicsPreUpdates); @@ -160,6 +166,12 @@ public class PhysicsEngine2DStandalone : IPhysicsEngine2D for (int i = physicsPostUpdates.Count - 1; i >= 0; i--) 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)