Example #1
0
    public static bool CircleToRect(MDPEntity circle, MDPEntity rectangle)
    {
        float circleRadius = circle.Collider.Properties.Radius;
        float rectWidth    = rectangle.Collider.Properties.Width;
        float rectHeight   = rectangle.Collider.Properties.Height;

        float xDistance = Mathf.Abs(circle.transform.position.x - rectangle.transform.position.x);
        float zDistance = Mathf.Abs(circle.transform.position.z - rectangle.transform.position.z);

        if (xDistance > rectWidth / 2 + circleRadius || zDistance > rectHeight / 2 + circleRadius)
        {
            return(false);
        }

        if (xDistance <= rectWidth / 2 || zDistance <= rectHeight / 2)
        {
            return(true);
        }

        float cornerX = xDistance - rectWidth / 2;
        float cornerZ = zDistance - rectHeight / 2;
        float cornerDistanceSquared = cornerX * cornerX + cornerZ * cornerZ;

        return(cornerDistanceSquared < circleRadius * circleRadius);
    }
Example #2
0
    /*public static bool Collides(CircleCollider o1, CircleCollider o2)
     * {
     *      float radiusSum = o1.Properties.Radius + o2.Properties.Radius;
     *
     * float distanceSquared = MDPUtility.DistanceSquared(o1.gameObject, o2.gameObject);
     *
     * // Square root is a slow operation so square the radii instead
     * return distanceSquared < radiusSum * radiusSum;
     * }*/

    public static bool CircleToCircle(MDPEntity o1, MDPEntity o2)
    {
        float radiusSum = o1.Collider.Properties.Radius + o2.Collider.Properties.Radius;

        float distanceSquared = MDPUtility.DistanceSquared(o1.gameObject, o2.gameObject);

        // Square root is a slow operation so square the radii instead
        return(distanceSquared < radiusSum * radiusSum);
    }
Example #3
0
    public CircleCollider(MDPEntity entity)
    {
        m_Entity = entity;

        float lengthX = m_Entity.gameObject.GetComponent <Renderer>().bounds.size.x * 0.5f;
        float lengthZ = m_Entity.gameObject.GetComponent <Renderer>().bounds.size.z * 0.5f;

        Properties.Radius = (lengthX > lengthZ) ? lengthX : lengthZ;
    }
Example #4
0
    public override bool CollidesWith(GameObject o2)
    {
        MDPEntity entity     = o2.GetComponent(typeof(MDPEntity)) as MDPEntity;
        Collider  o2Collider = entity.Collider;

        if (o2Collider is CircleCollider)
        {
            return(Intersection.CircleToCircle(m_Entity, entity));
        }
        else
        {
            return(false);
        }
    }
Example #5
0
 public static bool RectToRect(MDPEntity o1, MDPEntity o2)
 {
     return((Mathf.Abs(o1.transform.position.x - o2.transform.position.x) * 2 < o1.Collider.Properties.Width + o2.Collider.Properties.Width) &&
            (Mathf.Abs(o1.transform.position.z - o2.transform.position.z) * 2 < o1.Collider.Properties.Height + o2.Collider.Properties.Height));
 }