feat: CollisionDetector CircleCircle Projection
This commit is contained in:
parent
f980546d37
commit
271a9a244b
|
@ -49,17 +49,34 @@ public class CollisionDetector : ICollisionDetector
|
||||||
{
|
{
|
||||||
collisionInformation = default;
|
collisionInformation = default;
|
||||||
|
|
||||||
Vector2D leftToRightCenter = left.CircleWorld.Center.FromTo(right.CircleWorld.Center);
|
Vector2D leftToRightCenterProjectionVector = left.CircleWorld.Center.FromTo(right.CircleWorld.Center).Normalized;
|
||||||
float distanceCircleCenter = leftToRightCenter.Magnitude;
|
|
||||||
float radiusSum = left.CircleWorld.Radius + right.CircleWorld.Radius;
|
|
||||||
|
|
||||||
float circleSurfaceDistance = distanceCircleCenter - radiusSum;
|
Projection leftProjection = left.CircleWorld.ToProjection(leftToRightCenterProjectionVector);
|
||||||
|
Projection rightProjection = right.CircleWorld.ToProjection(leftToRightCenterProjectionVector);
|
||||||
|
|
||||||
bool collision = circleSurfaceDistance <= 0f;
|
bool collision = leftProjection.Overlaps(rightProjection, out float depth);
|
||||||
|
|
||||||
if (collision)
|
if (collision)
|
||||||
collisionInformation = new(left, right, leftToRightCenter.Normalized, -circleSurfaceDistance);
|
collisionInformation = new(left, right, leftToRightCenterProjectionVector, depth);
|
||||||
|
|
||||||
return collision;
|
return collision;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// private static bool DetectCircleCircle(ICircleCollider2D left, ICircleCollider2D right, out CollisionDetectionInformation? collisionInformation)
|
||||||
|
// {
|
||||||
|
// collisionInformation = default;
|
||||||
|
|
||||||
|
// Vector2D leftToRightCenter = left.CircleWorld.Center.FromTo(right.CircleWorld.Center);
|
||||||
|
// float distanceCircleCenter = leftToRightCenter.Magnitude;
|
||||||
|
// float radiusSum = left.CircleWorld.Radius + right.CircleWorld.Radius;
|
||||||
|
|
||||||
|
// float circleSurfaceDistance = distanceCircleCenter - radiusSum;
|
||||||
|
|
||||||
|
// bool collision = circleSurfaceDistance <= 0f;
|
||||||
|
|
||||||
|
// if (collision)
|
||||||
|
// collisionInformation = new(left, right, leftToRightCenter.Normalized, -circleSurfaceDistance);
|
||||||
|
|
||||||
|
// return collision;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue