agtawtg
This commit is contained in:
@@ -56,10 +56,10 @@ public class PhysicsEngine2D : IPhysicsEngine2D
|
||||
CheckCollisions(colliders[i], colliders, (collider1, collider2, collisionVertex) =>
|
||||
{
|
||||
ResolveCollision(collider1, collider2, collisionVertex, intervalDeltaTime);
|
||||
ResolveCollision(collider2, collider1, collisionVertex, intervalDeltaTime);
|
||||
// ResolveCollision(collider2, collider1, collisionVertex, intervalDeltaTime);
|
||||
|
||||
collider1.Recalculate();
|
||||
collider2.Recalculate();
|
||||
// collider1.Recalculate();
|
||||
// collider2.Recalculate();
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -76,7 +76,8 @@ public class PhysicsEngine2D : IPhysicsEngine2D
|
||||
c2.Vertices.ToLines(lines);
|
||||
|
||||
Vector2 normal = Vector2.UnitY;
|
||||
float t = 0f;
|
||||
float t = 1f;
|
||||
bool hasIntersectedWithLines = false;
|
||||
|
||||
foreach (var line in lines)
|
||||
{
|
||||
@@ -86,16 +87,24 @@ public class PhysicsEngine2D : IPhysicsEngine2D
|
||||
if (intersectionPoint is not Vector2 ip)
|
||||
continue;
|
||||
|
||||
t = vertexTrajectory.GetT(ip);
|
||||
float tTemp = vertexTrajectory.GetT(ip);
|
||||
if (tTemp > t) // React to the earliest collision value
|
||||
continue;
|
||||
|
||||
t = tTemp;
|
||||
Vector2 lineDirection = line.Direction;
|
||||
normal = new(lineDirection.Y, lineDirection.X);
|
||||
break;
|
||||
hasIntersectedWithLines = true;
|
||||
}
|
||||
|
||||
StepRigidBody(c1.RigidBody2D, -t * intervalDeltaTime);
|
||||
if (!hasIntersectedWithLines)
|
||||
return;
|
||||
|
||||
float rewindInterval = t * intervalDeltaTime;
|
||||
StepRigidBody(c1.RigidBody2D, -rewindInterval);
|
||||
|
||||
c1.RigidBody2D.Velocity = Vector2.Reflect(c1.RigidBody2D.Velocity, normal);
|
||||
StepRigidBody(c1.RigidBody2D, intervalDeltaTime - t * intervalDeltaTime);
|
||||
StepRigidBody(c1.RigidBody2D, rewindInterval);
|
||||
}
|
||||
|
||||
private void CheckCollisions(ICollider2D collider2D, List<ICollider2D> collider2Ds, Action<ICollider2D, ICollider2D, Vector2> OnCollisionDetectedAction)
|
||||
|
Reference in New Issue
Block a user