public void CollideCircleCircle(int entityOne, Vector3 positionOne, ComponentCollisionCircle circleOne, int entityTwo, Vector3 positionTwo, ComponentCollisionCircle circleTwo) { float diffX = positionOne.X - positionTwo.X; float diffY = positionOne.Z - positionTwo.Z; float minDistance = circleOne.Radius() + circleTwo.Radius(); float distance = (float)Math.Sqrt(Math.Pow(diffX, 2) + Math.Pow(diffY, 2)); if (distance < minDistance) { collisionManager.CollisionDetected(entities[entityOne], entities[entityTwo]); } }
public void CollideCircleSquare(int entityOne, Vector3 positionOne, ComponentCollisionCircle circle, int entityTwo, Vector3 positionTwo, ComponentCollisionSquare square) { float circleX = positionOne.X; float circleY = positionOne.Z; float rectMinX = positionTwo.X - (square.Width() / 2); float rectMaxX = positionTwo.X + (square.Width() / 2); float rectMinY = positionTwo.Z - (square.Height() / 2); float rectMaxY = positionTwo.Z + (square.Height() / 2); float nearestX = Math.Min(rectMaxX, Math.Max(circleX, rectMinX)); float nearestY = Math.Min(rectMaxY, Math.Max(circleY, rectMinY)); //float nearestX = Math.Max(positionTwo.X + (square.Width() / 2), Math.Min(positionOne.X, positionTwo.X - (square.Width() / 2))); //float nearestY = Math.Max(positionTwo.Z + (square.Height() / 2), Math.Min(positionOne.Z, positionTwo.Z - (square.Height() / 2))); float diffX = circleX - nearestX; float diffY = circleY - nearestY; float distance = (float)Math.Sqrt(Math.Pow(diffX, 2) + Math.Pow(diffY, 2)); if (distance < circle.Radius()) { collisionManager.CollisionDetected(entities[entityOne], entities[entityTwo]); } }