| 
									
										
										
										
											2022-07-04 11:17:39 +00:00
										 |  |  |  | using System; | 
					
						
							|  |  |  |  | using System.Collections; | 
					
						
							|  |  |  |  | using System.Collections.Generic; | 
					
						
							|  |  |  |  | using UnityEngine; | 
					
						
							|  |  |  |  | using UnityEngine.EventSystems; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | namespace MMO | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |     public class MMOUIManager : MonoBehaviour | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         public bool IsUICovered | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             get | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 return mUIList.Count > 0; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public Canvas UICanvas | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             get | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (mUICanvas == null) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     mUICanvas = GetComponent<Canvas>(); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 return mUICanvas; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public Camera UICamera | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             get | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (mUICamera == null) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     mUICamera = UICanvas.worldCamera; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 return mUICamera; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         private Canvas mUICanvas; | 
					
						
							|  |  |  |  |         private Camera mUICamera; | 
					
						
							|  |  |  |  |         private Dictionary<Type, MMOUIBase> mUIDic = new Dictionary<Type, MMOUIBase>(); | 
					
						
							|  |  |  |  |         private List<MMOUIBase> mUIList = new List<MMOUIBase>(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public T OpenUI<T>() where T : MMOUIBase | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             T tUI = GetUI<T>(); | 
					
						
							|  |  |  |  |             tUI.gameObject.SetActive(true); | 
					
						
							|  |  |  |  |             tUI.OnOpen(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (tUI.IsStack) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (mUIList.Contains(tUI)) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     mUIList.Remove(tUI); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 if (mUIList.Count > 0) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     mUIList[mUIList.Count - 1].OnFocus(false); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 mUIList.Add(tUI); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             return tUI; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public T CloseUI<T>() where T : MMOUIBase | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             T tUI = GetUI<T>(); | 
					
						
							|  |  |  |  |             CloseUI(tUI); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             return tUI; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public void CloseUI(MMOUIBase pMMOUIBase) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (pMMOUIBase.IsStack) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 int tIndex = mUIList.IndexOf(pMMOUIBase); | 
					
						
							|  |  |  |  |                 if (tIndex == mUIList.Count - 1) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     mUIList.Remove(pMMOUIBase); | 
					
						
							|  |  |  |  |                     if (mUIList.Count > 0) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         mUIList[mUIList.Count - 1].OnFocus(true); | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 else | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     mUIList.Remove(pMMOUIBase); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2022-09-09 14:35:49 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |             pMMOUIBase.gameObject.SetActive(false); | 
					
						
							|  |  |  |  |             pMMOUIBase.OnClose(); | 
					
						
							| 
									
										
										
										
											2022-07-04 11:17:39 +00:00
										 |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public T GetUI<T>() where T : MMOUIBase | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             T tUI = null; | 
					
						
							|  |  |  |  |             if (!mUIDic.ContainsKey(typeof(T))) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 mUIDic[typeof(T)] = GetComponentInChildren<T>(true); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             tUI = mUIDic[typeof(T)] as T; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             return tUI; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public void CloseAll() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             for (int i = mUIList.Count - 1; i >= 0; i--) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 CloseUI(mUIList[i]); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public static bool IsTouchUI() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (EventSystem.current != null) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 PointerEventData eventData = new PointerEventData(EventSystem.current); | 
					
						
							|  |  |  |  |                 eventData.position = Input.mousePosition; | 
					
						
							|  |  |  |  |                 List<RaycastResult> results = new List<RaycastResult>(); | 
					
						
							|  |  |  |  |                 EventSystem.current.RaycastAll(eventData, results); | 
					
						
							|  |  |  |  |                 if (results == null || results.Count == 0) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     return false; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 return results.Count > 0 && results[0].gameObject.layer == 5; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             return false; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public static List<GameObject> GetChildGobList(Transform pParent) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             List<GameObject> tList = new List<GameObject>(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             for (int i = 0; i < pParent.childCount; i++) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 tList.Add(pParent.GetChild(i).gameObject); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             return tList; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public static List<T> GetChildList<T>(Transform pParent) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             List<T> tList = new List<T>(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             for (int i = 0; i < pParent.childCount; i++) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 tList.Add(pParent.GetChild(i).GetComponent<T>()); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             return tList; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | } |