Exemple #1
0
    /// <summary>
    /// Play movement animation.
    /// </summary>
    /// <param name="visible"></param>
    /// <param name="motionType"></param>
    /// <param name="side"></param>
    /// <param name="duration"></param>
    /// <param name="bouncesCount"></param>
    /// <param name="bouncePower"></param>
    public void ControlMovement(bool visible, MotionType motionType, ScreenSides side, float duration, EasingEquationsParameters easingParams, float edgeGap = 0.25f, bool instantStart = false, Vector3 customPosition = new Vector3(), bool customLocal = false)
    {
        Vector3 outPos = outOfScreenPos;

        if (side != HidingPosition || edgeGap != EdgeGap || (side == ScreenSides.Custom && customLocal != LocalCustomPosition))
        {
            outPos = GetHidingPosition(side, edgeGap, customPosition, customLocal);
        }

        Vector3 ePos = visible ? MovementSection.startVectorValue : outPos;
        Vector3 sPos = myRT.position;

        //If the GameObject isn't active then we can't play co-routines so change it instantly.
        if (!gameObject.activeInHierarchy)
        {
            myRT.position = ePos;
            return;
        }

        if (MovementSection.motionEnum != null)
        {
            StopCoroutine(MovementSection.motionEnum);
        }

        MovementSection.motionEnum = VectorMotion((v) => {
            myRT.position = v;
        }, sPos, ePos, MovementSection.HideAfter, MovementSection.ShowAfter,
                                                  duration, easingParams, motionType, instantStart);
        StartCoroutine(MovementSection.motionEnum);
    }
Exemple #2
0
    Vector3 GetHidingPosition(ScreenSides hidingPos, float edgeGap, Vector2 customPosition, bool customLocal, bool instantStart = false)
    {
        Vector3 pos = new Vector3();
        float   y   = 0;
        float   x   = 0;

        Vector2 distanceToEdge = new Vector2(myRT.pivot.x, myRT.pivot.y);

        Vector3 originalPosition = MovementSection.startVectorValue;

        switch (hidingPos)
        {
        case ScreenSides.Top:
            y   = parentCanvasRT.position.y + canvasHalfHeight + myRTHeight * (distanceToEdge.y + edgeGap);
            pos = new Vector3(originalPosition.x, y, originalPosition.z);
            break;

        case ScreenSides.Bottom:
            y   = parentCanvasRT.position.y - canvasHalfHeight - myRTHeight * (1 - distanceToEdge.y + edgeGap);
            pos = new Vector3(originalPosition.x, y, originalPosition.z);
            break;

        case ScreenSides.Left:
            x   = parentCanvasRT.position.x - canvasHalfWidth - myRTWidth * (1 - distanceToEdge.x + edgeGap);
            pos = new Vector3(x, originalPosition.y, originalPosition.z);
            break;

        case ScreenSides.Right:
            x   = parentCanvasRT.position.x + canvasHalfWidth + myRTWidth * (distanceToEdge.x + edgeGap);
            pos = new Vector3(x, originalPosition.y, originalPosition.z);
            break;

        case ScreenSides.TopLeftCorner:
            y   = parentCanvasRT.position.y + canvasHalfHeight + myRTHeight * (distanceToEdge.y + edgeGap);
            x   = parentCanvasRT.position.x - canvasHalfWidth - myRTWidth * (1 - distanceToEdge.x + edgeGap);
            pos = new Vector3(x, y, originalPosition.z);
            break;

        case ScreenSides.TopRightCorner:
            y   = parentCanvasRT.position.y + canvasHalfHeight + myRTHeight * (distanceToEdge.y + edgeGap);
            x   = parentCanvasRT.position.x + canvasHalfWidth + myRTWidth * (distanceToEdge.x + edgeGap);
            pos = new Vector3(x, y, originalPosition.z);
            break;

        case ScreenSides.BotLeftCorner:
            y   = parentCanvasRT.position.y - canvasHalfHeight - myRTHeight * (1 - distanceToEdge.y + edgeGap);
            x   = parentCanvasRT.position.x - canvasHalfWidth - myRTWidth * (1 - distanceToEdge.x + edgeGap);
            pos = new Vector3(x, y, originalPosition.z);
            break;

        case ScreenSides.BotRightCorner:
            y   = parentCanvasRT.position.y - canvasHalfHeight - myRTHeight * (1 - distanceToEdge.y + edgeGap);
            x   = parentCanvasRT.position.x + canvasHalfWidth + myRTWidth * (distanceToEdge.x + edgeGap);
            pos = new Vector3(x, y, originalPosition.z);
            break;

        case ScreenSides.Custom:
            Vector3 holderPos        = new Vector3();
            float   holderHalfWidth  = 0;
            float   holderHalfHeight = 0;

            if (customLocal && directParentRT)
            {
                holderPos        = directParentRT.position;
                holderHalfWidth  = dParentHalfWidth;
                holderHalfHeight = dParentHalfHeight;
            }
            else
            {
                holderPos        = parentCanvasRT.position;
                holderHalfWidth  = canvasHalfWidth;
                holderHalfHeight = canvasHalfHeight;
            }

            pos = new Vector3(
                holderPos.x + (customPosition.x - 0.5f) * holderHalfWidth * 2,
                holderPos.y + (customPosition.y - 0.5f) * holderHalfHeight * 2, originalPosition.z);
            break;
        }
        return(pos);
    }