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;
|
|
private bool isShowing = false;
|
|
|
|
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();
|
|
pauseGame();
|
|
}
|
|
|
|
public void showPanel()
|
|
{
|
|
// if (isShowing)
|
|
// return;
|
|
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).setIgnoreTimeScale(true);
|
|
}
|
|
|
|
public void hidePanel()
|
|
{
|
|
// if (!isShowing)
|
|
// return;
|
|
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).setIgnoreTimeScale(true);
|
|
}
|
|
|
|
public void setShowState()
|
|
{
|
|
canvasGroup.interactable = true;
|
|
canvasGroup.blocksRaycasts = true;
|
|
canvasGroup.alpha = 1f;
|
|
rectTransform.anchoredPosition3D = originalPos;
|
|
transform.localScale = Vector3.one;
|
|
isShowing = true;
|
|
}
|
|
|
|
public void setHideState()
|
|
{
|
|
canvasGroup.interactable = false;
|
|
canvasGroup.blocksRaycasts = false;
|
|
canvasGroup.alpha = 0f;
|
|
isShowing = false;
|
|
}
|
|
|
|
public void quitApplication()
|
|
{
|
|
Application.Quit();
|
|
}
|
|
|
|
public void startGame()
|
|
{
|
|
NotificationServer.notify("show GameUI");
|
|
unpauseGame();
|
|
}
|
|
|
|
public void pauseGame()
|
|
{
|
|
Time.timeScale = 0f;
|
|
}
|
|
|
|
public void unpauseGame()
|
|
{
|
|
Time.timeScale = 1f;
|
|
}
|
|
}
|