perf: physics engine memory leaks fixed

This commit is contained in:
Syntriax 2025-05-29 22:33:47 +03:00
parent bf8fbebae3
commit 9bf17cc191
2 changed files with 15 additions and 15 deletions

View File

@ -28,21 +28,21 @@ public class PhysicsEngine2D : UniverseObject, IPhysicsEngine2D
{
float intervalDeltaTime = deltaTime / IterationPerStep;
foreach (IPrePhysicsUpdate physicsPreUpdate in physicsPreUpdateCollector)
physicsPreUpdate.PrePhysicsUpdate(deltaTime);
for (int i = physicsPreUpdateCollector.Behaviours.Count - 1; i >= 0; i--)
physicsPreUpdateCollector.Behaviours[i].PrePhysicsUpdate(deltaTime);
foreach (IPhysicsUpdate physicsUpdate in physicsUpdateCollector)
physicsUpdate.PhysicsUpdate(deltaTime);
for (int i = physicsUpdateCollector.Behaviours.Count - 1; i >= 0; i--)
physicsUpdateCollector.Behaviours[i].PhysicsUpdate(deltaTime);
for (int iterationIndex = 0; iterationIndex < IterationPerStep; iterationIndex++)
{
// Can Parallel
foreach (IRigidBody2D rigidBody in rigidBodyCollector)
StepRigidBody(rigidBody, intervalDeltaTime);
for (int i = rigidBodyCollector.Behaviours.Count - 1; i >= 0; i--)
StepRigidBody(rigidBodyCollector.Behaviours[i], intervalDeltaTime);
// Can Parallel
foreach (ICollider2D collider in colliderCollector)
collider.Recalculate();
for (int i = colliderCollector.Behaviours.Count - 1; i >= 0; i--)
colliderCollector.Behaviours[i].Recalculate();
// Can Parallel
for (int x = 0; x < colliderCollector.Behaviours.Count; x++)
@ -65,8 +65,8 @@ public class PhysicsEngine2D : UniverseObject, IPhysicsEngine2D
OnPhysicsIteration?.Invoke(this, intervalDeltaTime);
}
foreach (IPostPhysicsUpdate physicsPostUpdate in physicsPostUpdateCollector)
physicsPostUpdate.PostPhysicsUpdate(deltaTime);
for (int i = physicsPostUpdateCollector.Behaviours.Count - 1; i >= 0; i--)
physicsPostUpdateCollector.Behaviours[i].PostPhysicsUpdate(deltaTime);
OnPhysicsStep?.Invoke(this, deltaTime);
}
@ -95,8 +95,8 @@ public class PhysicsEngine2D : UniverseObject, IPhysicsEngine2D
{
StepRigidBody(rigidBody, intervalDeltaTime);
foreach (ICollider2D collider in childColliders)
collider.Recalculate();
for (int i = childColliders.Count - 1; i >= 0; i--)
childColliders[i].Recalculate();
for (int x = 0; x < childColliders.Count; x++)
{

View File

@ -45,12 +45,12 @@ public class PhysicsEngine2DStandalone : IPhysicsEngine2D
for (int iterationIndex = 0; iterationIndex < IterationPerStep; iterationIndex++)
{
// Can Parallel
for (int i = 0; i < rigidBodies.Count; i++)
for (int i = rigidBodies.Count - 1; i >= 0; i--)
StepRigidBody(rigidBodies[i], intervalDeltaTime);
// Can Parallel
foreach (ICollider2D collider in colliders)
collider.Recalculate();
for (int i = colliders.Count - 1; i >= 0; i--)
colliders[i].Recalculate();
// Can Parallel
for (int x = 0; x < colliders.Count; x++)