/// <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); }
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); }