You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

177 lines
4.8 KiB

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