Exemple #1
0
 /// <summary>
 /// Check for a collision between a LineSegmentCollider and a CircleCollider.
 /// </summary>
 /// <param name="self"></param>
 /// <param name="other"></param>
 public static bool Collision(LineSegmentCollider self, CircleCollider other)
 {
     return(Collision(other, self));
 }
 public static bool Collision(CircleCollider self, RayCollider other)
 {
     return(GeometryUtils.CircleToRayPOI(
                self.x, self.y, self.radius, other.x1, other.y1, other.x2, other.y2).Length > 0);
 }
Exemple #3
0
 /// <summary>
 /// Check for a collision between a RayCollider and a CircleCollider.
 /// </summary>
 /// <param name="self"></param>
 /// <param name="other"></param>
 public static bool Collision(RayCollider self, CircleCollider other)
 {
     return(Collision(other, self));
 }
 /// <summary>
 /// Check for a collision between a ParticleCollider and a CircleCollider.
 /// </summary>
 /// <param name="self"></param>
 /// <param name="other"></param>
 public static bool Collision(ParticleCollider self, CircleCollider other)
 {
     return Collision(other, self);
 }
 public static bool Collision(CircleCollider self, CircleCollider other)
 {
     Vector2 center1 = new Vector2((float)self.x, (float)self.y);
     Vector2 center2 = new Vector2((float)other.x, (float)other.y);
     return Vector2.Distance(center1, center2) < self.radius + other.radius;
 }
        public static bool Collision(CircleCollider self, RectCollider other)
        {
            double cx = self.x, cy = self.y, r = self.radius;
            double x = other.x, y = other.y, w = other.width, h = other.height;
            double rx = x + w / 2, ry = y + h / 2;
            double x_offset = Math.Abs(cx - rx);
            double y_offset = Math.Abs(cy - ry);
            double half_width = w / 2;
            double half_height = h / 2;

            if (x_offset > (half_width + r))
                return false;
            else if (y_offset > (half_height + r))
                return false;

            if (x_offset <= half_width)
                return true;
            else if (y_offset <= half_height)
                return true;

            double deltax = x_offset - half_width;
            double deltay = y_offset - half_height;
            double dist = Math.Pow(deltax, 2) + Math.Pow(deltay, 2);
            return dist <= r * r ? true : false;
        }
 public static bool Collision(CircleCollider self, RayCollider other)
 {
     return GeometryUtils.CircleToRayPOI(
         self.x, self.y, self.radius, other.x1, other.y1, other.x2, other.y2).Length > 0;
 }
 public static bool Collision(CircleCollider self, ParticleCollider other)
 {
     Vector2 center = new Vector2((float)self.x, (float)self.y);
     Vector2 particle = new Vector2((float)other.x, (float)other.y);
     return Vector2.Distance(center, particle) < self.radius;
 }