Manager - UIManager.cs - 经理_UI
public class UIManager: BaseManager
{
private Transform canvasTransform;
private Transform CanvasTransform{}
private Dictionary<UIPanelType, string> panelPathDict;//存储所有面板Prefab的路径
private Dictionary<UIPanelType, BasePanel> panelDict;//保存所有实例化面板的游戏物体身上的BasePanel组件
private Stack<BasePanel> panelStack;
private MessagePanel msgPanel;
private UIPanelType panelTypeToPush = UIPanelType.None;
public UIManager(GameFacade facade) : base(facade){}
public override void OnInit(){}
public override void Update(){}
public void PushPanelSync(UIPanelType panelType){}
/// 把某个页面入栈, 把某个页面显示在界面上
public BasePanel PushPanel(UIPanelType panelType){}
/// 出栈 ,把页面从界面上移除
public void PopPanel(){}
/// 根据面板类型 得到实例化的面板
private BasePanel GetPanel(UIPanelType panelType){}
[Serializable]
class UIPanelTypeJson{}
private void ParseUIPanelTypeJson(){}
public void InjectMsgPanel(MessagePanel msgPanel){}
public void ShowMessage(string msg){}
public void ShowMessageSync(string msg){}
}
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
public class UIManager: BaseManager
{
///
/// 单例模式的核心
/// 1,定义一个静态的对象 在外界访问 在内部构造
/// 2,构造方法私有化
//private static UIManager _instance;
//public static UIManager Instance
//{
// get
// {
// if (_instance == null)
// {
// _instance = new UIManager();
// }
// return _instance;
// }
//}
private Transform canvasTransform;
private Transform CanvasTransform
{
get
{
if (canvasTransform == null)
{
canvasTransform = GameObject.Find("Canvas").transform;
}
return canvasTransform;
}
}
private Dictionary<UIPanelType, string> panelPathDict;//存储所有面板Prefab的路径
private Dictionary<UIPanelType, BasePanel> panelDict;//保存所有实例化面板的游戏物体身上的BasePanel组件
private Stack<BasePanel> panelStack;
private MessagePanel msgPanel;
private UIPanelType panelTypeToPush = UIPanelType.None;
public UIManager(GameFacade facade) : base(facade)
{
ParseUIPanelTypeJson();
}
public override void OnInit()
{
base.OnInit();
PushPanel(UIPanelType.Message);
PushPanel(UIPanelType.Start);
}
public override void Update()
{
if (panelTypeToPush != UIPanelType.None)
{
PushPanel(panelTypeToPush);
panelTypeToPush = UIPanelType.None;
}
}
public void PushPanelSync(UIPanelType panelType)
{
panelTypeToPush = panelType;
}
/// <summary>
/// 把某个页面入栈, 把某个页面显示在界面上
/// </summary>
public BasePanel PushPanel(UIPanelType panelType)
{
if (panelStack == null)
panelStack = new Stack<BasePanel>();
//判断一下栈里面是否有页面
if (panelStack.Count > 0)
{
BasePanel topPanel = panelStack.Peek();
topPanel.OnPause();
}
BasePanel panel = GetPanel(panelType);
panel.OnEnter();
panelStack.Push(panel);
return panel;
}
/// <summary>
/// 出栈 ,把页面从界面上移除
/// </summary>
public void PopPanel()
{
if (panelStack == null)
panelStack = new Stack<BasePanel>();
if (panelStack.Count <= 0) return;
//关闭栈顶页面的显示
BasePanel topPanel = panelStack.Pop();
topPanel.OnExit();
if (panelStack.Count <= 0) return;
BasePanel topPanel2 = panelStack.Peek();
topPanel2.OnResume();
}
/// <summary>
/// 根据面板类型 得到实例化的面板
/// </summary>
/// <returns></returns>
private BasePanel GetPanel(UIPanelType panelType)
{
if (panelDict == null)
{
panelDict = new Dictionary<UIPanelType, BasePanel>();
}
//BasePanel panel;
//panelDict.TryGetValue(panelType, out panel);//TODO
BasePanel panel = panelDict.TryGet(panelType);
if (panel == null)
{
//如果找不到,那么就找这个面板的prefab的路径,然后去根据prefab去实例化面板
//string path;
//panelPathDict.TryGetValue(panelType, out path);
string path = panelPathDict.TryGet(panelType);
GameObject instPanel = GameObject.Instantiate(Resources.Load(path)) as GameObject;
instPanel.transform.SetParent(CanvasTransform,false);
instPanel.GetComponent<BasePanel>().UIMng = this;
instPanel.GetComponent<BasePanel>().Facade = facade;
panelDict.Add(panelType, instPanel.GetComponent<BasePanel>());
return instPanel.GetComponent<BasePanel>();
}
else
{
return panel;
}
}
[Serializable]
class UIPanelTypeJson
{
public List<UIPanelInfo> infoList;
}
private void ParseUIPanelTypeJson()
{
panelPathDict = new Dictionary<UIPanelType, string>();
TextAsset ta = Resources.Load<TextAsset>("UIPanelType");
UIPanelTypeJson jsonObject = JsonUtility.FromJson<UIPanelTypeJson>(ta.text);
foreach (UIPanelInfo info in jsonObject.infoList)
{
//Debug.Log(info.panelType);
panelPathDict.Add(info.panelType, info.path);
}
}
public void InjectMsgPanel(MessagePanel msgPanel)
{
this.msgPanel = msgPanel;
}
public void ShowMessage(string msg)
{
if (msgPanel == null)
{
Debug.Log("无法显示提示信息,MsgPanel为空");return;
}
msgPanel.ShowMessage(msg);
}
public void ShowMessageSync(string msg)
{
if (msgPanel == null)
{
Debug.Log("无法显示提示信息,MsgPanel为空"); return;
}
msgPanel.ShowMessageSync(msg);
}
/// <summary>
/// just for test
/// </summary>
//public void Test()
//{
// string path ;
// panelPathDict.TryGetValue(UIPanelType.Knapsack,out path);
// Debug.Log(path);
//}
}