feat: IPhysicsIteration interface added
This commit is contained in:
@@ -21,6 +21,7 @@ public class PhysicsEngine2D : Behaviour, IPhysicsEngine2D
|
||||
private static Comparer<IBehaviour> SortByPriority() => Comparer<IBehaviour>.Create((x, y) => y.Priority.CompareTo(x.Priority));
|
||||
protected ActiveBehaviourCollectorSorted<IPrePhysicsUpdate> physicsPreUpdateCollector = new() { SortBy = SortByPriority() };
|
||||
protected ActiveBehaviourCollectorSorted<IPhysicsUpdate> physicsUpdateCollector = new() { SortBy = SortByPriority() };
|
||||
protected ActiveBehaviourCollectorSorted<IPhysicsIteration> physicsIterationCollector = new() { SortBy = SortByPriority() };
|
||||
protected ActiveBehaviourCollectorSorted<IPostPhysicsUpdate> physicsPostUpdateCollector = new() { SortBy = SortByPriority() };
|
||||
protected BehaviourCollector<IRigidBody2D> rigidBodyCollector = new();
|
||||
protected BehaviourCollector<ICollider2D> colliderCollector = new();
|
||||
@@ -40,6 +41,9 @@ public class PhysicsEngine2D : Behaviour, IPhysicsEngine2D
|
||||
|
||||
for (int iterationIndex = 0; iterationIndex < IterationPerStep; iterationIndex++)
|
||||
{
|
||||
for (int i = physicsIterationCollector.Count - 1; i >= 0; i--)
|
||||
physicsIterationCollector[i].PhysicsIterate(intervalDeltaTime);
|
||||
|
||||
// Can Parallel
|
||||
for (int i = rigidBodyCollector.Count - 1; i >= 0; i--)
|
||||
StepRigidBody(rigidBodyCollector[i], intervalDeltaTime);
|
||||
@@ -82,21 +86,26 @@ public class PhysicsEngine2D : Behaviour, IPhysicsEngine2D
|
||||
List<ICollider2D> childColliders = [];
|
||||
List<IPrePhysicsUpdate> physicsPreUpdates = [];
|
||||
List<IPhysicsUpdate> physicsUpdates = [];
|
||||
List<IPhysicsIteration> physicsIterations = [];
|
||||
List<IPostPhysicsUpdate> physicsPostUpdates = [];
|
||||
|
||||
rigidBody.BehaviourController.GetBehavioursInChildren(childColliders);
|
||||
rigidBody.BehaviourController.GetBehavioursInChildren(physicsPreUpdates);
|
||||
rigidBody.BehaviourController.GetBehavioursInChildren(physicsUpdates);
|
||||
rigidBody.BehaviourController.GetBehavioursInChildren(physicsIterations);
|
||||
rigidBody.BehaviourController.GetBehavioursInChildren(physicsPostUpdates);
|
||||
|
||||
foreach (IPrePhysicsUpdate physicsPreUpdate in physicsPreUpdates)
|
||||
physicsPreUpdate.PrePhysicsUpdate(deltaTime);
|
||||
for (int i = physicsPreUpdates.Count - 1; i >= 0; i--)
|
||||
physicsPreUpdates[i].PrePhysicsUpdate(deltaTime);
|
||||
|
||||
foreach (IPhysicsUpdate physicsUpdate in physicsUpdates)
|
||||
physicsUpdate.PhysicsUpdate(deltaTime);
|
||||
for (int i = physicsUpdates.Count - 1; i >= 0; i--)
|
||||
physicsUpdates[i].PhysicsUpdate(deltaTime);
|
||||
|
||||
for (int iterationIndex = 0; iterationIndex < IterationPerStep; iterationIndex++)
|
||||
{
|
||||
for (int i = physicsIterations.Count - 1; i >= 0; i--)
|
||||
physicsIterations[i].PhysicsIterate(intervalDeltaTime);
|
||||
|
||||
StepRigidBody(rigidBody, intervalDeltaTime);
|
||||
|
||||
for (int i = childColliders.Count - 1; i >= 0; i--)
|
||||
@@ -120,8 +129,8 @@ public class PhysicsEngine2D : Behaviour, IPhysicsEngine2D
|
||||
}
|
||||
}
|
||||
|
||||
foreach (IPostPhysicsUpdate physicsPostUpdate in physicsPostUpdates)
|
||||
physicsPostUpdate.PostPhysicsUpdate(deltaTime);
|
||||
for (int i = physicsPostUpdates.Count - 1; i >= 0; i--)
|
||||
physicsPostUpdates[i].PostPhysicsUpdate(deltaTime);
|
||||
}
|
||||
|
||||
private void ResolveColliders(ICollider2D colliderX, ICollider2D colliderY)
|
||||
|
Reference in New Issue
Block a user