//Box vs Circle public override bool Collides(CircleCollider circle, ref Collision collisionInfo) { float deltaX = circle.Position.X - Math.Max( Position.X - halfWidth, Math.Min(circle.Position.X, Position.X + halfWidth) ); float deltaY = circle.Position.Y - Math.Max( Position.Y - halfHeight, Math.Min(circle.Position.Y, Position.Y + halfHeight) ); // RAD(x2 + y2) < r // x2 + y2 < r2 return((deltaX * deltaX + deltaY * deltaY) < (circle.Radius * circle.Radius)); }
public override bool Collides(CircleCollider circle, ref Collision collisionInfo) { return(circle.Collides(BoundingCollider, ref collisionInfo) && InnerCollidersCollide(circle, ref collisionInfo)); }
public abstract bool Collides(CircleCollider circle, ref Collision collisionInfo);
//Circle vs Circle public override bool Collides(CircleCollider other, ref Collision collisionInfo) { Vector2 dist = other.Position - Position; return(dist.LengthSquared <= Math.Pow(Radius + other.Radius, 2)); }