| | |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | | |
| | | /// <summary> |
| | | /// 延迟几秒执行事件 |
| | | /// </summary> |
| | | public class WaitCallBack : MonoBehaviour |
| | | { |
| | | internal float waitTime = 2.0f; |
| | | |
| | | public bool doOnAwake = false; |
| | | /// <summary> |
| | | /// 延迟几秒执行事件 |
| | | /// 时间到达回调 |
| | | /// </summary> |
| | | public class WaitCallBack : MonoBehaviour |
| | | public Action<Component> OnCompelete; |
| | | /// <summary> |
| | | /// 每帧回调 |
| | | /// </summary> |
| | | public Action<Component> OnWait; |
| | | |
| | | internal static Dictionary<GameObject, WaitCallBack> waitDic = new Dictionary<GameObject, WaitCallBack>(); |
| | | |
| | | private float m_Time = 0; |
| | | |
| | | private bool start = false; |
| | | |
| | | private Component m_Comp; |
| | | |
| | | private void Awake() |
| | | { |
| | | internal float waitTime = 2.0f; |
| | | |
| | | public bool doOnAwake = false; |
| | | /// <summary> |
| | | /// 时间到达回调 |
| | | /// </summary> |
| | | public Action<Component> OnCompelete; |
| | | /// <summary> |
| | | /// 每帧回调 |
| | | /// </summary> |
| | | public Action<Component> OnWait; |
| | | |
| | | internal static Dictionary<GameObject, WaitCallBack> waitDic = new Dictionary<GameObject, WaitCallBack>(); |
| | | |
| | | private float m_Time = 0; |
| | | |
| | | private bool start = false; |
| | | |
| | | private Component m_Comp; |
| | | |
| | | private void Awake() |
| | | if (doOnAwake) |
| | | { |
| | | if (doOnAwake) |
| | | { |
| | | Play(); |
| | | } |
| | | } |
| | | |
| | | private void OnDisable() |
| | | { |
| | | Stop(); |
| | | } |
| | | |
| | | private void Update() |
| | | { |
| | | if (start) |
| | | { |
| | | m_Time += Time.deltaTime; |
| | | if (m_Time >= waitTime) |
| | | { |
| | | Stop(); |
| | | if (OnCompelete != null) |
| | | OnCompelete(m_Comp); |
| | | } |
| | | if (OnWait != null && start) |
| | | OnWait(m_Comp); |
| | | } |
| | | } |
| | | |
| | | internal void Play() |
| | | { |
| | | start = true; |
| | | } |
| | | |
| | | internal void Restart() |
| | | { |
| | | m_Time = 0; |
| | | Play(); |
| | | } |
| | | |
| | | internal void Stop() |
| | | { |
| | | m_Time = 0; |
| | | start = false; |
| | | } |
| | | |
| | | internal void Pause() |
| | | { |
| | | start = false; |
| | | } |
| | | |
| | | private void OnDestroy() |
| | | { |
| | | if (waitDic.ContainsKey(gameObject)) |
| | | { |
| | | waitDic.Remove(gameObject); |
| | | } |
| | | } |
| | | |
| | | internal void AddWaitDic(Component go) |
| | | { |
| | | m_Comp = go; |
| | | waitDic.Add(go.gameObject, this); |
| | | } |
| | | } |
| | | |
| | | public static class Helper |
| | | private void OnDisable() |
| | | { |
| | | public static void DoWaitStart(this Component go) |
| | | { |
| | | if (GetWait(go) == null) |
| | | return; |
| | | GetWait(go).Play(); |
| | | } |
| | | Stop(); |
| | | } |
| | | |
| | | public static void OnWaitCompelete(this Component go, Action<Component> func) |
| | | private void Update() |
| | | { |
| | | if (start) |
| | | { |
| | | WaitCallBack wait = GetWait(go); |
| | | if (wait == null) |
| | | return; |
| | | wait.OnCompelete = func; |
| | | } |
| | | |
| | | public static void OnWait(this Component go, Action<Component> func) |
| | | { |
| | | WaitCallBack wait = GetWait(go); |
| | | if (wait == null) |
| | | return; |
| | | wait.OnWait = func; |
| | | } |
| | | |
| | | public static void DoWaitRestart(this Component go) |
| | | { |
| | | if (GetWait(go) == null) |
| | | return; |
| | | GetWait(go).Restart(); |
| | | } |
| | | |
| | | public static void DoWaitStop(this Component go) |
| | | { |
| | | if (GetWait(go) == null) |
| | | return; |
| | | GetWait(go).Stop(); |
| | | } |
| | | |
| | | public static void DoWaitPause(this Component go) |
| | | { |
| | | if (GetWait(go) == null) |
| | | return; |
| | | GetWait(go).Pause(); |
| | | } |
| | | |
| | | public static WaitCallBack GetWait(Component go) |
| | | { |
| | | WaitCallBack wait = null; |
| | | if (go == null) |
| | | return null; |
| | | WaitCallBack.waitDic.TryGetValue(go.gameObject, out wait); |
| | | if (wait == null) |
| | | m_Time += Time.deltaTime; |
| | | if (m_Time >= waitTime) |
| | | { |
| | | wait = go.GetComponent<WaitCallBack>(); |
| | | if (wait == null) |
| | | { |
| | | wait = go.gameObject.AddComponent<WaitCallBack>(); |
| | | } |
| | | wait.AddWaitDic(go); |
| | | Stop(); |
| | | if (OnCompelete != null) |
| | | OnCompelete(m_Comp); |
| | | } |
| | | return wait; |
| | | } |
| | | |
| | | public static void SetWait(this Component comp, float time) |
| | | { |
| | | WaitCallBack wait = GetWait(comp); |
| | | if (wait != null) |
| | | { |
| | | wait.waitTime = time; |
| | | } |
| | | if (OnWait != null && start) |
| | | OnWait(m_Comp); |
| | | } |
| | | } |
| | | |
| | | internal void Play() |
| | | { |
| | | start = true; |
| | | } |
| | | |
| | | internal void Restart() |
| | | { |
| | | m_Time = 0; |
| | | Play(); |
| | | } |
| | | |
| | | internal void Stop() |
| | | { |
| | | m_Time = 0; |
| | | start = false; |
| | | } |
| | | |
| | | internal void Pause() |
| | | { |
| | | start = false; |
| | | } |
| | | |
| | | private void OnDestroy() |
| | | { |
| | | if (waitDic.ContainsKey(gameObject)) |
| | | { |
| | | waitDic.Remove(gameObject); |
| | | } |
| | | } |
| | | |
| | | internal void AddWaitDic(Component go) |
| | | { |
| | | m_Comp = go; |
| | | waitDic.Add(go.gameObject, this); |
| | | } |
| | | } |
| | | |
| | | public static class Helper |
| | | { |
| | | public static void DoWaitStart(this Component go) |
| | | { |
| | | if (GetWait(go) == null) |
| | | return; |
| | | GetWait(go).Play(); |
| | | } |
| | | |
| | | public static void OnWaitCompelete(this Component go, Action<Component> func) |
| | | { |
| | | WaitCallBack wait = GetWait(go); |
| | | if (wait == null) |
| | | return; |
| | | wait.OnCompelete = func; |
| | | } |
| | | |
| | | public static void OnWait(this Component go, Action<Component> func) |
| | | { |
| | | WaitCallBack wait = GetWait(go); |
| | | if (wait == null) |
| | | return; |
| | | wait.OnWait = func; |
| | | } |
| | | |
| | | public static void DoWaitRestart(this Component go) |
| | | { |
| | | if (GetWait(go) == null) |
| | | return; |
| | | GetWait(go).Restart(); |
| | | } |
| | | |
| | | public static void DoWaitStop(this Component go) |
| | | { |
| | | if (GetWait(go) == null) |
| | | return; |
| | | GetWait(go).Stop(); |
| | | } |
| | | |
| | | public static void DoWaitPause(this Component go) |
| | | { |
| | | if (GetWait(go) == null) |
| | | return; |
| | | GetWait(go).Pause(); |
| | | } |
| | | |
| | | public static WaitCallBack GetWait(Component go) |
| | | { |
| | | WaitCallBack wait = null; |
| | | if (go == null) |
| | | return null; |
| | | WaitCallBack.waitDic.TryGetValue(go.gameObject, out wait); |
| | | if (wait == null) |
| | | { |
| | | wait = go.GetComponent<WaitCallBack>(); |
| | | if (wait == null) |
| | | { |
| | | wait = go.gameObject.AddComponent<WaitCallBack>(); |
| | | } |
| | | wait.AddWaitDic(go); |
| | | } |
| | | return wait; |
| | | } |
| | | |
| | | public static void SetWait(this Component comp, float time) |
| | | { |
| | | WaitCallBack wait = GetWait(comp); |
| | | if (wait != null) |
| | | { |
| | | wait.waitTime = time; |
| | | } |
| | | } |
| | | } |
| | | |