/// <summary>
    ///
    /// </summary>
    /// <param name="nonstaticCapsule"></param>
    /// <param name="staticCircle"></param>
    /// <param name="collidedVertically"></param>
    /// <returns></returns>
    public static Vector2 IntersectionPointNonstaticCapsuleStaticCircle(CustomCapsuleCollider2D nonstaticCapsule, CustomCircleCollider2D staticCircle, bool collidedVertically = true)
    {
        Vector2 cCenter   = staticCircle.GetCenter();
        Vector2 capCenter = nonstaticCapsule.GetCenter();
        Vector2 collisionPoint;

        if (collidedVertically)
        {
            if (cCenter.y < capCenter.y)
            {
                collisionPoint = CollisionPointCircleOnCircleBounds(nonstaticCapsule.bounds.bottomCircleBounds, staticCircle.bounds);
            }
            else
            {
                collisionPoint = CollisionPointCircleOnCircleBounds(nonstaticCapsule.bounds.topCircleBounds, staticCircle.bounds);
            }
            return(IntersectionPointColliderVerticalAtXPoint(nonstaticCapsule, staticCircle, collisionPoint.x));
        }
        else
        {
            if (cCenter.y > nonstaticCapsule.bounds.rectBounds.topLeft.y)
            {
                collisionPoint = CollisionPointCircleOnCircleBounds(nonstaticCapsule.bounds.topCircleBounds, staticCircle.bounds);
            }
            else if (cCenter.y < nonstaticCapsule.bounds.rectBounds.bottomLeft.y)
            {
                collisionPoint = CollisionPointCircleOnCircleBounds(nonstaticCapsule.bounds.bottomCircleBounds, staticCircle.bounds);
            }
            else
            {
                collisionPoint = cCenter;
            }
            return(IntersectionPointColliderHorizontalAtYPoint(nonstaticCapsule, staticCircle, collisionPoint.y));
        }
    }
    public static Vector2 IntersectionPointStaticCapsuleNonStaticRect(CustomCapsuleCollider2D staticCapsule, CustomBoxCollider2D nonstaticRect, bool collidedVertically = true)
    {
        Vector2 rCenter   = nonstaticRect.GetCenter();
        Vector2 capCenter = staticCapsule.GetCenter();

        if (collidedVertically)
        {
            float xPoint = rCenter.x;
            if (nonstaticRect.bounds.topRight.x < rCenter.x)
            {
                xPoint = nonstaticRect.bounds.topRight.x;
            }
            else if (nonstaticRect.bounds.topLeft.x > rCenter.x)
            {
                xPoint = nonstaticRect.bounds.topLeft.x;
            }

            return(IntersectionPointColliderVerticalAtXPoint(nonstaticRect, staticCapsule, xPoint));
        }
        else
        {
            float yPoint = rCenter.y;
            if (nonstaticRect.bounds.topLeft.y < staticCapsule.bounds.rectBounds.bottomLeft.y)
            {
                yPoint = nonstaticRect.bounds.topLeft.y;
            }
            else if (nonstaticRect.bounds.bottomLeft.y > staticCapsule.bounds.rectBounds.topLeft.y)
            {
                yPoint = nonstaticRect.bounds.bottomLeft.y;
            }

            return(IntersectionPointColliderHorizontalAtYPoint(nonstaticRect, staticCapsule, yPoint));
        }
    }
Exemplo n.º 3
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="colliderToCheck"></param>
    /// <returns></returns>
    public override bool ColliderIntersectHorizontally(CustomCollider2D colliderToCheck)
    {
        if (rigid.Velocity.x == 0)
        {
            return(false);
        }

        if (CircleColliderCollisionsAtBounds(horizontalBoundsFromVelocity, colliderToCheck))
        {
            if (colliderToCheck is CustomBoxCollider2D)
            {
                Vector2 pointOfCollision = IntersectionPointNonstaticRectOnStaticCircle(((CustomBoxCollider2D)colliderToCheck), this, false);

                this.transform.position = new Vector3(pointOfCollision.x, this.transform.position.y, this.transform.position.z);

                return(true);
            }
            else if (colliderToCheck is CustomCircleCollider2D)
            {
                CustomCircleCollider2D customcircleToCheck = (CustomCircleCollider2D)colliderToCheck;

                Vector2 collisionPoint = IntersectionPointCircleOnCircle(this, customcircleToCheck, false);
                this.transform.position = new Vector3(collisionPoint.x, this.transform.position.y, this.transform.position.z);
            }
            else if (colliderToCheck is CustomCapsuleCollider2D)
            {
                CustomCapsuleCollider2D capCollider = (CustomCapsuleCollider2D)colliderToCheck;

                Vector2 collisionPoint = IntersectionPointStaticCapsuleNonstaticCircle(capCollider, this, false);
                this.transform.position = new Vector3(collisionPoint.x, this.transform.position.y, this.transform.position.z);
            }
            return(true);
        }
        return(false);
    }
    void OnEnable()
    {
        capCol = (CustomCapsuleCollider2D)target;

        polyCollider = capCol.GetComponent <PolygonCollider2D>();
        if (polyCollider == null)
        {
            polyCollider = capCol.gameObject.AddComponent <PolygonCollider2D>();
        }

        polyCollider.points = capCol.getPoints();
    }