using System; using Microsoft.Xna.Framework; namespace BouncyCatIsBouncy { struct RadialBB : ICollidable { public float Radius { get; set; } public Vector2 Center { get; set; } public RadialBB(float radius) : this() { Radius = radius; } public RadialBB(float radius, Vector2 center) : this(radius) { Center = center; } public CollisionInfo Collides(RadialBB other) { var difference = Center - other.Center; var distSquared = difference.LengthSquared(); var radiusSum = Radius + other.Radius; //If squared distance is less than or equal to the sum of the squared radii, they collide if (distSquared <= radiusSum * radiusSum) { Vector2 normal = Vector2.Normalize(difference); float penetration = radiusSum - (float)Math.Sqrt(distSquared); return new CollisionInfo(true, normal, penetration); } return new CollisionInfo(); } } }