//based on the anchors : left | center | right //0=left anchor, 0.5=when anchored center, 1=right. Returns where it should be when transitioning from left private Vector2 GetPositionByAnchorForLeftorRight(CallablePanel panel, RectTransform panelRectTransform, TransitionSide leftOrRight) { Vector2 positionToGoTo; if (panelRectTransform.anchorMax.x == 0) { positionToGoTo = new Vector2(-panelRectTransform.sizeDelta.x, panel.originalPos.y); } else if (panelRectTransform.anchorMax.x == 0.5) { positionToGoTo = new Vector2((-panelRectTransform.sizeDelta.x - canvasWidth) / 2f, panel.originalPos.y); } else { //else if ... == 1f : positionToGoTo = new Vector2(-panelRectTransform.sizeDelta.x - canvasWidth / 2f - panelRectTransform.sizeDelta.x / 2f, panel.originalPos.y); } switch (leftOrRight) { case TransitionSide.left: return(positionToGoTo); case TransitionSide.right: return(new Vector2(positionToGoTo.x * -1, positionToGoTo.y)); //just to turn it other way round default: return(positionToGoTo); } }
//0=bottom anchor, 0.5=when anchored center, 1=top. Returns where it should be when transitioning from top private Vector2 GetPositionByAnchorForToporBottom(CallablePanel panel, RectTransform panelRectTransform, TransitionSide topOrBottom) { Vector2 positionToGoTo; if (panelRectTransform.anchorMax.y == 0) { positionToGoTo = new Vector2(panel.originalPos.x, canvasHeight + (panelRectTransform.sizeDelta.y / 2)); } else if (panelRectTransform.anchorMax.y == 0.5) { positionToGoTo = new Vector2(panel.originalPos.x, (canvasHeight / 2) + panelRectTransform.sizeDelta.y / 2); } else { //else if ... == 1f : positionToGoTo = new Vector2(panel.originalPos.x, panelRectTransform.sizeDelta.y); } switch (topOrBottom) { case TransitionSide.top: return(positionToGoTo); case TransitionSide.bottom: return(new Vector2(positionToGoTo.x, positionToGoTo.y * -1)); //just to turn it other way round default: return(positionToGoTo); } }
public static void DisappearTransitionEffectINIT(CallablePanel panel) { switch (panel.disappearTransition) { case DisappearTransition.noAnimation: panel.panel.SetActive(false); break; case DisappearTransition.fadeOut: panel.canvasGroup.alpha = 1f; panelManager.StartCoroutine(panelManager.FadeOut(panel, 1f)); break; case DisappearTransition.flyAwayLeft: panelManager.StartCoroutine(panelManager.FlyAwayLeft(panel, 1f)); break; case DisappearTransition.flyAwayTop: panelManager.StartCoroutine(panelManager.FlyAwayTop(panel, 1f)); break; case DisappearTransition.flyAwayRight: panelManager.StartCoroutine(panelManager.FlyAwayRight(panel, 1f)); break; case DisappearTransition.flyAwayBottom: panelManager.StartCoroutine(panelManager.FlyAwayBottom(panel, 1f)); break; default: break; } }
/// <summary> /// checks whether or not are show/display buttons the same for passed panel /// </summary> private static bool AreShowHideButtonsTheSame(CallablePanel panel) { if (panel.showPanelButton.GetInstanceID() == panel.hidePanelButton.GetInstanceID()) { return(true); } else { return(false); } }
//methods for effects of appearing/disappearing: public static void AppearTransitionEffectINIT(CallablePanel panel) { panel.panel.SetActive(true); if (panel.renderAboveEverything) { panel.panel.transform.SetAsLastSibling(); } switch (panel.appearTransition) { case AppearTransition.noAnimation: panel.panel.SetActive(true); break; case AppearTransition.fadeIn: panel.canvasGroup.alpha = 0f; panelManager.StartCoroutine(panelManager.FadeIn(panel, 1f)); break; case AppearTransition.flyInFromLeft: panelManager.StartCoroutine(panelManager.FlyInFromLeft(panel, 1f)); break; case AppearTransition.flyInFromTop: panelManager.StartCoroutine(panelManager.FlyInFromTop(panel, 1f)); break; case AppearTransition.flyInFromRight: panelManager.StartCoroutine(panelManager.FlyInFromRight(panel, 1f)); break; case AppearTransition.flyInFromBottom: panelManager.StartCoroutine(panelManager.FlyInFromBottom(panel, 1f)); break; default: break; } if (panel.shouldHideAfterTime) { panelManager.StartCoroutine(panelManager.HideAfterTimeT(panel, panel.hideAfterTime)); } //trigger panel displayed event if (panelManager.NewPanelDisplayedManager != null) { PanelDisplayedArgs panelDisplayedArgs = new PanelDisplayedArgs() { PanelThatGotDisplayed = panel }; panelManager.NewPanelDisplayedManager(panelDisplayedArgs); } }
/// <summary> /// pass panel and its button (show or hide) that you want to deactivate in antagonist manner. /// Meaning, if you pass show button, then it will deactivate show button, but activate hide button. /// If you pass hide button, then it will deactivate hide button, but activate show button. /// </summary> private static void AntagonistButtonDeactivation(CallablePanel panel, GameObject button) { if (panel.showPanelButton.gameObject.GetInstanceID() == button.GetInstanceID()) { button.SetActive(false); panel.hidePanelButton.gameObject.SetActive(true); } else if (panel.hidePanelButton.gameObject.GetInstanceID() == button.GetInstanceID()) { button.SetActive(false); panel.showPanelButton.gameObject.SetActive(true); } }
/// ///****** panels' transition methods (appear / disappear effects and animations ) ****** /// #region transition effect methods private IEnumerator FadeIn(CallablePanel panel, float fadeTime) { isTransitionInProcess = true; panel.rectTransform.anchoredPosition = panel.originalPos; float elapsedTime = 0; while (elapsedTime < fadeTime) { float A = panel.canvasGroup.alpha; float B = 1f; panel.canvasGroup.alpha = Mathf.Lerp(A, B, elapsedTime / fadeTime); elapsedTime += Time.deltaTime; yield return(new WaitForEndOfFrame()); } isTransitionInProcess = false; }
private IEnumerator FlyInFromBottom(CallablePanel panel, float flyInTime) { isTransitionInProcess = true; panel.canvasGroup.alpha = 1f; Vector2 A = GetPositionByAnchorForToporBottom(panel, panel.rectTransform, TransitionSide.bottom); Vector2 B = panel.originalPos; float elapsedTime = 0; while (elapsedTime < flyInTime) { panel.rectTransform.anchoredPosition = Vector2.Lerp(A, B, elapsedTime / flyInTime); elapsedTime += Time.deltaTime; yield return(new WaitForEndOfFrame()); } isTransitionInProcess = false; }
private IEnumerator FadeOut(CallablePanel panel, float fadeTime) { isTransitionInProcess = true; GameObject panelGO = panel.panel; float elapsedTime = 0; while (elapsedTime < fadeTime) { float A = panel.canvasGroup.alpha; float B = 0f; panel.canvasGroup.alpha = Mathf.Lerp(A, B, elapsedTime / fadeTime); elapsedTime += Time.deltaTime; yield return(new WaitForEndOfFrame()); } isTransitionInProcess = false; panelGO.SetActive(false); }
private IEnumerator FlyAwayRight(CallablePanel panel, float flyAwayTime) { isTransitionInProcess = true; GameObject panelGO = panel.panel; Vector2 A = panel.originalPos; Vector2 B = GetPositionByAnchorForLeftorRight(panel, panel.rectTransform, TransitionSide.right); float elapsedTime = 0; while (elapsedTime < flyAwayTime) { panel.rectTransform.anchoredPosition = Vector2.Lerp(A, B, elapsedTime / flyAwayTime); elapsedTime += Time.deltaTime; yield return(new WaitForEndOfFrame()); } isTransitionInProcess = false; panel.canvasGroup.alpha = 0f; panelGO.SetActive(false); }
public IEnumerator HideAfterTimeT(CallablePanel panel, float seconds) { yield return(new WaitForSeconds(seconds)); DisappearTransitionEffectINIT(panel); }