You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
4.5 KiB
C#
163 lines
4.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using FairyGUI;
|
|
using Object = UnityEngine.Object;
|
|
|
|
namespace Game
|
|
{
|
|
public class UIManager : ManagerBase<UIManager>
|
|
{
|
|
public readonly UIPoolManager Creator = new UIPoolManager();
|
|
private readonly Dictionary<EuiPage, IUIPageBase> _mUIDict = new Dictionary<EuiPage, IUIPageBase>();
|
|
private readonly Stack<EuiPage> _mUIStack = new Stack<EuiPage>();
|
|
private IUIPageBase _mCurPage;
|
|
|
|
public override void OnCreate()
|
|
{
|
|
StageCamera.CheckMainCamera();
|
|
StageCamera.main.nearClipPlane = 0;
|
|
StageCamera.main.gameObject.layer = 5; //UILayer
|
|
|
|
Object.DontDestroyOnLoad(StageCamera.main.gameObject);
|
|
|
|
foreach (var package in Enum.GetValues(typeof(EuiPackage)))
|
|
{
|
|
//导入包
|
|
var packageStr = package.ToString();
|
|
UIPackage.AddPackage($"UIRes/{packageStr}");
|
|
//绑定view类
|
|
var binderType = System.Type.GetType($"Game.{packageStr}.{packageStr}Binder");
|
|
binderType?.GetMethod("BindAll")?.Invoke(null, null);
|
|
}
|
|
// Cursor.visible = false;
|
|
}
|
|
|
|
public override void Update()
|
|
{
|
|
foreach (var kvp in _mUIDict)
|
|
{
|
|
var page = kvp.Value;
|
|
if (page.IsActive())
|
|
{
|
|
page.Update();
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void FixedUpdate()
|
|
{
|
|
foreach (var kvp in _mUIDict)
|
|
{
|
|
var page = kvp.Value;
|
|
if (page.IsActive())
|
|
{
|
|
page.FixedUpdate();
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void OnDestroy()
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// 打开页面,如果是全屏页面则入栈
|
|
/// </summary>
|
|
/// <param name="page"></param>
|
|
public void Open(EuiPage page, params object[] values)
|
|
{
|
|
if (!_mUIDict.ContainsKey(page))
|
|
{
|
|
var uiObj = (IUIPageBase)typeof(IUIPageBase).Assembly.CreateInstance($"Game.Page{page.ToString()}");
|
|
_mUIDict[page] = uiObj;
|
|
_mUIDict[page].Create(page);
|
|
}
|
|
|
|
if (_mUIDict[page].IsFullPage())
|
|
{
|
|
if (_mUIStack.Count > 0)
|
|
{
|
|
CloseTop();
|
|
}
|
|
|
|
_mUIStack.Push(page);
|
|
_mCurPage = _mUIDict[page];
|
|
}
|
|
else
|
|
{
|
|
if (_mCurPage == null)
|
|
{
|
|
return; //非全屏页面不能单独存在
|
|
}
|
|
|
|
_mCurPage.AddSubPage(page);
|
|
}
|
|
|
|
_mUIDict[page].Open(values);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 栈顶全屏页面退栈
|
|
/// </summary>
|
|
public void Close()
|
|
{
|
|
if (_mCurPage == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
_mUIStack.Pop();
|
|
CloseTop();
|
|
if (_mUIStack.Count > 0)
|
|
{
|
|
var pageCur = _mUIStack.Peek();
|
|
_mCurPage = _mUIDict[pageCur];
|
|
_mUIDict[pageCur].Open();
|
|
}
|
|
else
|
|
{
|
|
_mCurPage = null;
|
|
}
|
|
}
|
|
|
|
private void CloseTop()
|
|
{
|
|
_mCurPage.Close();
|
|
foreach (var item in _mCurPage.GetSubPages())
|
|
{
|
|
if (_mUIDict[item].IsActive())
|
|
{
|
|
_mUIDict[item].Close();
|
|
}
|
|
}
|
|
|
|
_mCurPage.RemoveSubPageAll();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 关闭指定页面,如果是全屏页面则不操作
|
|
/// </summary>
|
|
/// <param name="page"></param>
|
|
public void Close(EuiPage page)
|
|
{
|
|
if (_mUIDict.ContainsKey(page) && !_mUIDict[page].IsFullPage())
|
|
{
|
|
_mUIDict[page].Close();
|
|
}
|
|
}
|
|
|
|
public void OpenInNew(EuiPage page, params object[] values)
|
|
{
|
|
CloseAll();
|
|
Open(page, values);
|
|
}
|
|
|
|
public void CloseAll()
|
|
{
|
|
while (_mUIStack.Count > 0)
|
|
{
|
|
Close();
|
|
}
|
|
}
|
|
}
|
|
} |