mirror of
https://github.com/Memorix101/UnityXNA/
synced 2024-12-30 15:25:35 +01:00
55 lines
1.5 KiB
C#
55 lines
1.5 KiB
C#
|
#region File Description
|
|||
|
//-----------------------------------------------------------------------------
|
|||
|
// Circle.cs
|
|||
|
//
|
|||
|
// Microsoft XNA Community Game Platform
|
|||
|
// Copyright (C) Microsoft Corporation. All rights reserved.
|
|||
|
//-----------------------------------------------------------------------------
|
|||
|
#endregion
|
|||
|
|
|||
|
using System;
|
|||
|
using Microsoft.Xna.Framework;
|
|||
|
|
|||
|
namespace Platformer
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Represents a 2D circle.
|
|||
|
/// </summary>
|
|||
|
struct Circle
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Center position of the circle.
|
|||
|
/// </summary>
|
|||
|
public Vector2 Center;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Radius of the circle.
|
|||
|
/// </summary>
|
|||
|
public float Radius;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Constructs a new circle.
|
|||
|
/// </summary>
|
|||
|
public Circle(Vector2 position, float radius)
|
|||
|
{
|
|||
|
Center = position;
|
|||
|
Radius = radius;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Determines if a circle intersects a rectangle.
|
|||
|
/// </summary>
|
|||
|
/// <returns>True if the circle and rectangle overlap. False otherwise.</returns>
|
|||
|
public bool Intersects(Rectangle rectangle)
|
|||
|
{
|
|||
|
Vector2 v = new Vector2(MathHelper.Clamp(Center.X, rectangle.Left, rectangle.Right),
|
|||
|
MathHelper.Clamp(Center.Y, rectangle.Top, rectangle.Bottom));
|
|||
|
|
|||
|
Vector2 direction = Center - v;
|
|||
|
float distanceSquared = direction.LengthSquared();
|
|||
|
|
|||
|
return ((distanceSquared > 0) && (distanceSquared < Radius * Radius));
|
|||
|
}
|
|||
|
}
|
|||
|
}
|