diff --git a/Engine.Physics2D/PhysicsEngine2D.cs b/Engine.Physics2D/PhysicsEngine2D.cs index 62d309b..511ecd0 100644 --- a/Engine.Physics2D/PhysicsEngine2D.cs +++ b/Engine.Physics2D/PhysicsEngine2D.cs @@ -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++) { diff --git a/Engine.Physics2D/PhysicsEngine2DStandalone.cs b/Engine.Physics2D/PhysicsEngine2DStandalone.cs index dbe160d..375ed60 100644 --- a/Engine.Physics2D/PhysicsEngine2DStandalone.cs +++ b/Engine.Physics2D/PhysicsEngine2DStandalone.cs @@ -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++)