Files
UltimateFishing/Assets/Scripts/Assembly-CSharp/LapinerTools/uMyGUI/uMyGUI_AnimationTrigger.cs
2026-02-21 16:45:37 +08:00

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