|
|
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- public class UIPanel : MonoBehaviour
- {
- public enum UIAnimType
- {
- Fade,
- ZoomIn,
- ZoomOut,
- SlideRight,
- SlideLeft,
- SlideUp,
- SlideDown
- }
-
- public bool showOnAwake = false;
- public string overrideNotifyName;
- public UIAnimType showAnimType = UIAnimType.Fade;
- public UIAnimType hideAnimType = UIAnimType.Fade;
- public AnimationCurve fadeCurve;
- public AnimationCurve showCurve;
- public AnimationCurve hideCurve;
-
- public float time = 0.5f;
- public float zoomAmount = 1.2f;
- public float slideAmount = 800f;
-
- private RectTransform rectTransform;
- private CanvasGroup canvasGroup;
- private Vector3 originalPos;
-
- void Awake ()
- {
- rectTransform = GetComponent<RectTransform>();
- canvasGroup = GetComponent<CanvasGroup>();
- if (canvasGroup == null)
- canvasGroup = gameObject.AddComponent<CanvasGroup>();
-
- if (overrideNotifyName == null || overrideNotifyName == "")
- {
- NotificationServer.register("show " + gameObject.name, showPanel);
- NotificationServer.register("hide " + gameObject.name, hidePanel);
- }
- else
- {
- NotificationServer.register("show " + overrideNotifyName, showPanel);
- NotificationServer.register("hide " + overrideNotifyName, hidePanel);
- }
- }
-
- void Start()
- {
- originalPos = rectTransform.anchoredPosition3D;
-
- if (showOnAwake)
- setShowState();
- else
- setHideState();
- }
-
- public void showPanel()
- {
- float startAlpha = 0f;
- float endAlpha = 1f;
- Vector3 startPos = originalPos;
- Vector3 endPos = originalPos;
- Vector3 startScale = Vector3.one;
- Vector3 endScale = Vector3.one;
-
- if (showAnimType == UIAnimType.ZoomIn)
- startScale /= zoomAmount;
- else if (showAnimType == UIAnimType.ZoomOut)
- startScale *= zoomAmount;
- else if (showAnimType == UIAnimType.SlideRight)
- startPos += Vector3.left * slideAmount;
- else if (showAnimType == UIAnimType.SlideLeft)
- startPos += Vector3.right * slideAmount;
- else if (showAnimType == UIAnimType.SlideUp)
- startPos += Vector3.down * slideAmount;
- else if (showAnimType == UIAnimType.SlideDown)
- startPos += Vector3.up * slideAmount;
-
- LeanTween.cancel(gameObject, true);
- canvasGroup.interactable = false;
- canvasGroup.blocksRaycasts = true;
- canvasGroup.alpha = startAlpha;
- rectTransform.anchoredPosition3D = startPos;
- transform.localScale = startScale;
- LeanTween.value(gameObject, 0f, 1f, time).setOnUpdate((float val)=>{
- canvasGroup.alpha = startAlpha + (endAlpha-startAlpha)*fadeCurve.Evaluate(val);
- rectTransform.anchoredPosition3D = startPos + (endPos-startPos)*showCurve.Evaluate(val);
- transform.localScale = startScale + (endScale-startScale)*showCurve.Evaluate(val);
- }).setOnComplete(setShowState);
- }
-
- public void hidePanel()
- {
- float startAlpha = 1f;
- float endAlpha = 0f;
- Vector3 startPos = originalPos;
- Vector3 endPos = originalPos;
- Vector3 startScale = Vector3.one;
- Vector3 endScale = Vector3.one;
-
- if (hideAnimType == UIAnimType.ZoomIn)
- endScale *= zoomAmount;
- else if (hideAnimType == UIAnimType.ZoomOut)
- endScale /= zoomAmount;
- else if (hideAnimType == UIAnimType.SlideRight)
- endPos += Vector3.right * slideAmount;
- else if (hideAnimType == UIAnimType.SlideLeft)
- endPos += Vector3.left * slideAmount;
- else if (hideAnimType == UIAnimType.SlideUp)
- endPos += Vector3.up * slideAmount;
- else if (hideAnimType == UIAnimType.SlideDown)
- endPos += Vector3.down * slideAmount;
-
- LeanTween.cancel(gameObject, true);
- canvasGroup.interactable = false;
- canvasGroup.blocksRaycasts = true;
- canvasGroup.alpha = startAlpha;
- rectTransform.anchoredPosition3D = startPos;
- transform.localScale = startScale;
- LeanTween.value(gameObject, 0f, 1f, time).setOnUpdate((float val)=>{
- canvasGroup.alpha = startAlpha + (endAlpha-startAlpha)*fadeCurve.Evaluate(val);
- rectTransform.anchoredPosition3D = startPos + (endPos-startPos)*hideCurve.Evaluate(val);
- transform.localScale = startScale + (endScale-startScale)*hideCurve.Evaluate(val);
- }).setOnComplete(setHideState);
- }
-
- public void setShowState()
- {
- canvasGroup.interactable = true;
- canvasGroup.blocksRaycasts = true;
- canvasGroup.alpha = 1f;
- rectTransform.anchoredPosition3D = originalPos;
- transform.localScale = Vector3.one;
- }
-
- public void setHideState()
- {
- canvasGroup.interactable = false;
- canvasGroup.blocksRaycasts = false;
- canvasGroup.alpha = 0f;
- }
-
- public void quitApplication()
- {
- Application.Quit();
- }
-
- public void startGame()
- {
- NotificationServer.notify("show GameUI");
- }
- }
|