等待视图

xiaoxiao2021-07-05  220

public class WaitingView : MonoSingleton<WaitingView>, IPointerClickHandler { public static WaitingView mInstance; Action<object> _CBTimeout; object _Param; Coroutine _TimeCounter; private List<GameObject> _ExecutableGos = new List<GameObject>(); public GameObject _UIObject; public GameObject _UIObjectText; private bool _ForceWait; public override void Awake() { mInstance = this; base.Awake(); gameObject.SetActive(false); } public void StartWait(float timeout, Action<object> cb = null,object param = null,bool forceWait = false) { _UIObject.SetActive(true); _UIObjectText.SetActive(false); StartWaiting(timeout,cb,param,forceWait); } public void StartWaitWithoutImage(float timeout, Action<object> cb = null, object param = null, bool forceWait = false) { _UIObject.SetActive(false); _UIObjectText.SetActive(false); StartWaiting(timeout, cb, param, forceWait); } public void StartWaitAddText(float timeout,string title, Action<object> cb = null, object param = null, bool forceWait = false) { if (!String.IsNullOrEmpty(title)) { _UIObjectText.GetComponentInChildren<LocalizedText>().SetLocalizationName(title); } _UIObjectText.SetActive(true); _UIObject.SetActive(false); StartWaiting(timeout, cb, param, forceWait); } void StartWaiting(float timeout, Action<object> cb, object param, bool forceWait) { gameObject.SetActive(true); _CBTimeout = cb; _Param = param; _ForceWait = forceWait; _TimeCounter = StartCoroutine(TimeCounter(timeout)); } void CloseWaiting() { gameObject.SetActive(false); _ForceWait = false; if (_TimeCounter != null) { StopCoroutine(_TimeCounter); } } IEnumerator TimeCounter(float timeout) { yield return new WaitForSeconds(timeout); if (_CBTimeout != null) { _CBTimeout(_Param); } CloseWaiting(); } public void StopWait() { CloseWaiting(); } public bool IsWaitingView() { if (_UIObject.activeInHierarchy || _UIObjectText.activeInHierarchy) { return true; } else { return false; } } public bool IsForceWait() { return _ForceWait; } #region EventData public void AddExecutableObject(GameObject go) { if (!_ExecutableGos.Contains(go)) { _ExecutableGos.Add(go); } } public void RemoveExecutableObject(GameObject go) { if (!_ExecutableGos.Contains(go)) { _ExecutableGos.Remove(go); } } public void OnPointerClick(PointerEventData eventData) { PassEvent(eventData, ExecuteEvents.pointerClickHandler); } //把事件透下去 public void PassEvent<T>(PointerEventData data, ExecuteEvents.EventFunction<T> function) where T : IEventSystemHandler { if (_ExecutableGos.Count == 0) { return; } List<RaycastResult> results = new List<RaycastResult>(); EventSystem.current.RaycastAll(data, results); for (int i = 0; i < results.Count; i++) { if (_ExecutableGos.Contains(results[i].gameObject)) { ExecuteEvents.Execute(results[i].gameObject, data, function); } } } #endregion }

 

转载请注明原文地址: https://www.6miu.com/read-4821360.html

最新回复(0)