123 lines
2.7 KiB
C#
123 lines
2.7 KiB
C#
using System.Collections;
|
|
using UnityEngine;
|
|
|
|
namespace LapinerTools.uMyGUI
|
|
{
|
|
public class uMyGUI_AnimationTrigger : MonoBehaviour
|
|
{
|
|
public enum ETriggerMode
|
|
{
|
|
ON_ENABLE = 0,
|
|
ON_DISABLE = 1,
|
|
ON_UMYGUI_ACTIVATETAB = 2,
|
|
ON_UMYGUI_DEACTIVATETAB = 3,
|
|
REDIRECT_ONMYGUI_EVENTS = 4
|
|
}
|
|
|
|
[SerializeField]
|
|
private Animation m_animation;
|
|
|
|
[SerializeField]
|
|
private string m_clipName;
|
|
|
|
[SerializeField]
|
|
private ETriggerMode m_condition;
|
|
|
|
[SerializeField]
|
|
private bool m_isActivateOnAnimStart;
|
|
|
|
[SerializeField]
|
|
private bool m_isDeactivateOnAnimEnd;
|
|
|
|
[SerializeField]
|
|
private MonoBehaviour m_alternativeCoroutineWorker;
|
|
|
|
[SerializeField]
|
|
private GameObject m_redirectDestination;
|
|
|
|
private void OnEnable()
|
|
{
|
|
if (m_condition == ETriggerMode.ON_ENABLE)
|
|
{
|
|
Play();
|
|
}
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
if (m_condition == ETriggerMode.ON_DISABLE)
|
|
{
|
|
Play();
|
|
}
|
|
}
|
|
|
|
private void uMyGUI_OnActivateTab()
|
|
{
|
|
if (m_condition == ETriggerMode.ON_UMYGUI_ACTIVATETAB)
|
|
{
|
|
Play();
|
|
}
|
|
else if (m_condition == ETriggerMode.REDIRECT_ONMYGUI_EVENTS)
|
|
{
|
|
if (m_redirectDestination == null)
|
|
{
|
|
Debug.LogError("LE_AnimationTrigger: uMyGUI_OnActivateTab: REDIRECT_ONMYGUI_EVENTS mode requires m_redirectDestination to be set!");
|
|
}
|
|
else if (m_redirectDestination.activeInHierarchy)
|
|
{
|
|
m_redirectDestination.SendMessage("uMyGUI_OnActivateTab");
|
|
}
|
|
}
|
|
}
|
|
|
|
private void uMyGUI_OnDeactivateTab()
|
|
{
|
|
if (m_condition == ETriggerMode.ON_UMYGUI_DEACTIVATETAB)
|
|
{
|
|
Play();
|
|
}
|
|
else if (m_condition == ETriggerMode.REDIRECT_ONMYGUI_EVENTS)
|
|
{
|
|
if (m_redirectDestination == null)
|
|
{
|
|
Debug.LogError("LE_AnimationTrigger: uMyGUI_OnDeactivateTab: REDIRECT_ONMYGUI_EVENTS mode requires m_redirectDestination to be set!");
|
|
}
|
|
else if (m_redirectDestination.activeInHierarchy)
|
|
{
|
|
m_redirectDestination.SendMessage("uMyGUI_OnDeactivateTab");
|
|
}
|
|
}
|
|
}
|
|
|
|
private void Play()
|
|
{
|
|
if (m_animation != null)
|
|
{
|
|
if (m_isActivateOnAnimStart)
|
|
{
|
|
m_animation.gameObject.SetActive(true);
|
|
}
|
|
if (m_isDeactivateOnAnimEnd && m_animation[m_clipName] != null)
|
|
{
|
|
MonoBehaviour monoBehaviour = ((!(m_alternativeCoroutineWorker != null)) ? this : m_alternativeCoroutineWorker);
|
|
monoBehaviour.StartCoroutine(DeactivateAfterDelay(m_animation.gameObject, m_animation[m_clipName].length));
|
|
}
|
|
m_animation.Play(m_clipName);
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError("LE_AnimationTrigger: OnDisable: lost reference to Animation!");
|
|
}
|
|
}
|
|
|
|
private IEnumerator DeactivateAfterDelay(GameObject p_object, float p_delay)
|
|
{
|
|
yield return new WaitForSeconds(p_delay);
|
|
if (p_object != null)
|
|
{
|
|
p_object.SetActive(false);
|
|
}
|
|
}
|
|
}
|
|
}
|