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