/// <summary> /// 退回到上一个堆栈里面 /// </summary> /// <param name="type"></param> public void DoReturn(GlobalDefine.PanelType type) { if (m_nodeInfoDic.ContainsKey(type)) { NodeInfo nodeInfo = m_nodeInfoDic[type]; if (nodeInfo.uiControllerBase != null) { nodeInfo.uiControllerBase.Return(); } //Atheos 此处后面决定是用contians 还是用Peek检测当前堆栈的数据 //堆栈处理 if (m_nodeStack.Contains(type)) { m_nodeStack.Pop(); } if (m_nodeStack.Count > 0) { DoOpen(m_nodeStack.Peek()); } //if (nodeInfo.mediator != null) { // AppFacade.Instance.RemoveMediator(nodeInfo.mediatorName); //} } else { Debug.Log("节点<color=red>" + type + "</color>尚未被包含在树结构中"); } }
/// <summary> /// 打开自己 /// </summary> /// <param name="type"></param> public void DoOpen(GlobalDefine.PanelType type) { if (m_nodeInfoDic.ContainsKey(type)) { NodeInfo nodeInfo = m_nodeInfoDic[type]; Action openSelf = delegate() { nodeInfo.uiControllerBase.Open(); }; if (nodeInfo.uiControllerBase != null) { List <Order> orderList = new List <Order>(); SearchNodeInfo(nodeInfo, orderList); Preclose(orderList, openSelf); } else { DoCreate(type); if (nodeInfo.uiControllerBase != null) { List <Order> orderList = new List <Order>(); SearchNodeInfo(nodeInfo, orderList); Preclose(orderList, openSelf); } } if (nodeInfo.mediator != null) { AppFacade.Instance.RegisterMediator(nodeInfo.mediator); } } else { Debug.Log("<color=red>打开错误的节点,UI树种并不存在该节点</color>"); } }
/// <summary> /// 销毁自己 /// </summary> /// <param name="type"></param> public void DoDestroy(GlobalDefine.PanelType type) { if (m_nodeInfoDic.ContainsKey(type)) { NodeInfo nodeInfo = m_nodeInfoDic[type]; nodeInfo.uiControllerBase.Destroy(); nodeInfo.uiControllerBase = null; } }
/// <summary> /// 创建新的节点 /// </summary> /// <param name="type"></param> public void DoCreate(GlobalDefine.PanelType type) { if (m_nodeInfoDic.ContainsKey(type)) { NodeInfo nodeInfo = m_nodeInfoDic[type]; if (nodeInfo.uiControllerBase == null) { UnityEngine.Object asset = Resources.Load(m_nodeInfoDic[type].resource); GameObject ui = Instantiate(asset) as GameObject; ui.SetActive(false); RectTransform rectTransform = ui.GetComponent <RectTransform>(); if (rectTransform != null) { rectTransform.SetParent(transform, false); } Type classtype = Type.GetType(nodeInfo.type.ToString() + "View"); UIControllerBase controller = ui.GetComponent <UIControllerBase>(); if (controller != null) { if (controller.GetType().Equals(classtype)) { ui.AddComponent(classtype); controller = ui.GetComponent <UIControllerBase>(); controller.IsCache = nodeInfo.isCache; controller.Create(); } else { Debug.Log("已经存在这个控制器了"); } } else { ui.AddComponent(classtype); controller = ui.GetComponent <UIControllerBase>(); controller.IsCache = nodeInfo.isCache; controller.Create(); } nodeInfo.uiControllerBase = controller; if (!nodeInfo.isControlNode) { classtype = Type.GetType(nodeInfo.type.ToString() + "Mediator"); if (classtype != null) { Debug.Log(classtype.ToString()); nodeInfo.mediator = System.Activator.CreateInstance(classtype, nodeInfo.uiControllerBase as object) as IMediator; } else { nodeInfo.mediator = null; Debug.Log("中继器<color=yellow>" + nodeInfo.type.ToString() + "Mediator</color> is not exists"); } } } } else { Debug.Log("节点<color=red>" + type + "</color>尚未被包含在树结构中"); } }