153 lines
3.3 KiB
C#
153 lines
3.3 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
|
|
public class UIManager : S_MonoSingleton<UIManager>
|
|
{
|
|
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, BasePanel> mUIDic = new Dictionary<Type, BasePanel>();
|
|
private List<BasePanel> mUIList = new List<BasePanel>();
|
|
|
|
public T OpenUI<T>() where T : BasePanel
|
|
{
|
|
T tUI = GetUI<T>();
|
|
tUI.gameObject.SetActive(true);
|
|
tUI.OnOpen();
|
|
|
|
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 : BasePanel
|
|
{
|
|
T tUI = GetUI<T>();
|
|
CloseUI(tUI);
|
|
|
|
return tUI;
|
|
}
|
|
|
|
public void CloseUI(BasePanel pBasePanel)
|
|
{
|
|
pBasePanel.gameObject.SetActive(false);
|
|
pBasePanel.OnClose();
|
|
|
|
int tIndex = mUIList.IndexOf(pBasePanel);
|
|
if (tIndex == mUIList.Count - 1)
|
|
{
|
|
mUIList.Remove(pBasePanel);
|
|
if (mUIList.Count > 0)
|
|
{
|
|
mUIList[mUIList.Count - 1].OnFocus(true);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
mUIList.Remove(pBasePanel);
|
|
}
|
|
}
|
|
|
|
public T GetUI<T>() where T : BasePanel
|
|
{
|
|
T tUI = null;
|
|
if (!mUIDic.ContainsKey(typeof(T)))
|
|
{
|
|
mUIDic[typeof(T)] = GetComponentInChildren<T>(true);
|
|
}
|
|
|
|
tUI = mUIDic[typeof(T)] as T;
|
|
|
|
return tUI;
|
|
}
|
|
|
|
public void ShowTip(string pTip)
|
|
{
|
|
|
|
}
|
|
|
|
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;
|
|
}
|
|
} |