/// <summary> /// 发送事件给UI面板 /// </summary> /// <param name="SenderDto">事件数据对象</param> internal void SendEvent(EventDto SenderDto) { if (SenderDto.Type == UIEventType.SendTarget) { if (SenderDto.info == null) { Debug.LogException(new System.Exception("错误!发送指定UIPanel事件消息需指定发送对象,")); return; } BaseUIPanel PanelTarget = null; var type = SenderDto.info.GetType(); if (type == typeof(int)) { PanelTarget = UIData.GetData.GetPanel((int)SenderDto.info); } if (type == typeof(string)) { PanelTarget = UIData.GetData.GetPanel((string)SenderDto.info); } if (PanelTarget == null) { Debug.LogException(new System.Exception(string.Format("无法发送事件消息给{0}找不到该Panel", SenderDto.info))); return; } PanelTarget.OnEvent(SenderDto); } else { UIPanel_Event(SenderDto); } }
private BaseUIPanel TopPanel; //当前托管栈中最顶部的面板,一般此面板处于显示状态 #endregion Panel栈模块 /// <summary> /// 从托管栈中获取UI面板 /// </summary> /// <param name="panel">指定被获取的UI面板</param> /// <returns></returns> private BaseUIPanel GetPanel_in_Stack(BaseUIPanel panel) { BaseUIPanel ResultPanel = null; if (!PanelStack.Contains(panel)) { Debug.LogError("UIPanel托管栈中不存在该Panel"); } Stack <BaseUIPanel> stackpanel = new Stack <BaseUIPanel>(); BaseUIPanel pickupPanel; int number = PanelStack.Count; for (int i = 0; i < number; i++) { pickupPanel = PanelStack.Pop(); stackpanel.Push(pickupPanel); if (pickupPanel.Panel_Index == panel.Panel_Index) { ResultPanel = stackpanel.Pop(); break; } } while (stackpanel.Count > 0) { PanelStack.Push(stackpanel.Pop()); if (PanelStack.Count <= 0) { break; } } return(ResultPanel); }
private void RemovePanel(BaseUIPanel panel) { if (PanelInAllPanelsList(panel)) { allPanelsInScene.Remove(panel); } }
/// <summary> /// 放置UI面板到托管栈最顶部 /// </summary> /// <param name="panel">指定被放置的UI面板</param> private void TakePanelOnTop_in_StackTop(BaseUIPanel panel) { if (!panel) { return; } if (!PanelStack.Contains(panel)) { Debug.LogError("UIPanel托管栈中不存在该Panel"); return; } TopPanel = PanelStack.First(); if (!TopPanel) { return; } if (TopPanel.Panel_Index == panel.Panel_Index) { CheckPanelState(); TopPanel.OnShow(); return; } BaseUIPanel Findpanel = GetPanel_in_Stack(panel); if (Findpanel) { PanelStack.Push(Findpanel); } CheckPanelState(); TopPanel.OnShow(); }
public void ClosePanel(BaseUIPanel panel) { if (panel) { activePanels.Remove(panel); panel.CloseBehavior(); } }
/// <summary> /// 创建一个UI面板 /// </summary> /// <param name="panel">UI面板的名称</param> public void CreateUIPanel(BaseUIPanel panel) { var Panel = Resources.Load <GameObject>(GetData.UIPanlePath + panel.name).GetComponent <BaseUIPanel>(); //if (!UIPanleList.Contains(Panel)) { Panel.OnInit(Panel.Panel_Type, UIPanleList.Count, panel.Panel_Name); } }
/// <summary> /// 销毁UI面板 /// </summary> /// <param name="panel">销毁指定的UI面板</param> public void DestoryPanel(BaseUIPanel panel) { UIPanleList.Remove(panel); if (PanelStack.Contains(panel)) { RemovePanel_in_Stack(panel); } Object.Destroy(panel); }
/// <summary> /// 显示UI /// </summary> /// <param name="uiPanel"></param> public void Show(UIPanel uiPanel) { if (currentShow != null) { currentShow.OnExit(); } currentShow = uiBase[uiPanel]; currentShow.DoScreen(); }
public void OpenPopUp(BaseUIPanel panel) { if (panel && panel.panelType == PanelType.PopUp) { HideNonPopUps(); popUpsPanels.Add(panel); OpenPanel(panel); } }
private void InjectPanel(BaseUIPanel panel) { if (!PanelInAllPanelsList(panel)) { allPanelsInScene.Add(panel); if (panel.isOpen) { activePanels.Add(panel); } } }
/* * 注册进这里的UI可以做层级管理 * **/ public int GetPanelTier(BaseUIPanel panel) { if (panelList.Contains(panel)) { return(panelList.IndexOf(panel) + 1); } else { return(0); } }
public void OpenPanel(BaseUIPanel panel) { if (panel) { if (!PanelInAllPanelsList(panel)) { InjectPanel(panel); } panel.OpenBehavior(); } }
/* * 绑定一个父对象UI,父UI关闭时,子UI跟着关闭 * **/ public void BindParentUI(BaseUIPanel parentPanel, BaseUIPanel panel) { if (bindDic.ContainsKey(parentPanel)) { bindDic[parentPanel].Add(panel); } else { bindDic.Add(parentPanel, new List <BaseUIPanel>()); bindDic[parentPanel].Add(panel); } }
public void Awake() { instance = this; BaseUIPanel startPanel = transform.Find("UIPanel/StartUIPanel").GetComponent <BaseUIPanel>(); uiBase.Add(UIPanel.StartUI, startPanel); BaseUIPanel playPanel = transform.Find("UIPanel/PlayUIPanel").GetComponent <BaseUIPanel>(); uiBase.Add(UIPanel.PlayUI, playPanel); BaseUIPanel overPanel = transform.Find("UIPanel/OverUIPanel").GetComponent <BaseUIPanel>(); uiBase.Add(UIPanel.OverUI, overPanel); }
public void Show(string name) { if (currentPanel != null) { Hide(currentPanel.PanelName); } panelDic[name].gameObject.SetActive(true); panelDic[name].OnShow(GameController.Instrance.GameData); currentPanel = panelDic[name]; currentPanel.gameObject.GetComponent<RectTransform>().anchoredPosition = Vector2.zero; }
/// <summary> /// 获取UI面板 /// </summary> /// <param name="PanelIndex">UI面板序号</param> /// <returns></returns> public BaseUIPanel GetPanel(int PanelIndex) { BaseUIPanel Find = null; foreach (var item in UIPanleList) { if (item.Panel_Index == PanelIndex) { Find = item; break; } } return(Find); }
/// <summary> /// 显示UI面板 /// </summary> /// <param name="UIPanel">指定被显示的UI面板</param> public void ShowPanel(BaseUIPanel UIPanel) { if (!UIPanel) { Debug.LogError("错误!,缓存中找不到该Panel"); return; } //PanelStack.Push(UIPanel); if (!PanelStack.Contains(UIPanel)) { PanelStack.Push(UIPanel); } TakePanelToTop(UIPanel); //UIPanel.gameObject.SetActive(true); }
/* * 层级管理,加入UI排序 * **/ public void PushPanel(BaseUIPanel panel) { //如果队列中没有该UI则加入队列 if (!panelList.Contains(panel)) { //停止上一个界面 if (panelList.Count > 0) { BaseUIPanel topPanel = panelList[panelList.Count - 1]; topPanel.OnPause(); } panelList.Add(panel); panel.OnEnter(); OnChangeTier.Invoke(); } }
/// <summary> /// 获取UI面板 /// </summary> /// <param name="PanelName">UI面板的名称</param> /// <param name="type">UI面板类型</param> /// <returns></returns> public BaseUIPanel GetPanel(string PanelName, PanelType type) { if (UIPanleList.Count <= 0) { return(null); } BaseUIPanel Find = null; foreach (var item in UIPanleList) { if (item.Panel_Name == PanelName && item.Panel_Type == type) { Find = item; break; } } return(Find); }
/// <summary> /// 从托管栈中删除UI面板 /// </summary> /// <param name="panel">指定被删除的UI面板</param> private void RemovePanel_in_Stack(BaseUIPanel panel) { if (!panel) { return; } if (!PanelStack.Contains(panel)) { Debug.LogError("UIPanel托管栈中不存在该Panel"); return; } var removepanel = GetPanel_in_Stack(panel); removepanel.StopCheck(); removepanel.OnClose(); removepanel.Panel_State = PanelState.Close; CheckPanelState(); }
/* * 层级管理,弹出UI * **/ public void PopPanel(BaseUIPanel panel) { if (panelList.Count <= 0) { return; } //从列表中删除面板 if (panelList.Contains(panel)) { //判断是否有绑定子UI if (bindDic.ContainsKey(panel)) { foreach (BaseUIPanel bp in bindDic[panel]) { if (panelList.Contains(bp)) { panelList.Remove(bp); bp.OnExit(); } } } panelList.Remove(panel); panel.OnExit(); } else { return; } //恢复上一个面板 if (panelList.Count > 0) { panel = panelList[panelList.Count - 1]; panel.OnResume(); //Debug.Log(panel.name); } OnChangeTier.Invoke(); }
/// <summary> /// 销毁UI面板 /// </summary> /// <param name="panel">指定被销毁的UI面板</param> public static void DestoryPanel(BaseUIPanel panel) { UIData.GetData.DestoryPanel(panel); }
/// <summary> /// 放置UI面板到最顶部 /// </summary> /// <param name="Panel">指定被放置的UI面板</param> public void TakePanelToTop(BaseUIPanel Panel) { TakePanelOnTop_in_StackTop(Panel); Panel.transform.SetAsLastSibling(); }
private void HidePanel(BaseUIPanel panel) { ClosePanel(panel); temporarilyHiddenPanels.Add(panel); }
/// <summary> /// 关闭UI面板 /// </summary> /// <param name="panel">指定被关闭的UI面板</param> public void ClosePanel(BaseUIPanel panel) { RemovePanel_in_Stack(panel); panel.gameObject.SetActive(false); }
private bool PanelInAllPanelsList(BaseUIPanel panel) { return(allPanelsInScene.Contains(panel)); }
/// <summary> /// 关闭UI面板 /// </summary> /// <param name="panel">指定被关闭的UI面板</param> public static void ClosePanel(BaseUIPanel panel) { UIData.GetData.ClosePanel(panel); }
/// <summary> /// 显示UI面板 /// </summary> /// <param name="panel">指定被显示的UI面板</param> public static void ShowPanel(BaseUIPanel panel) { UIData.GetData.ShowPanel(panel); }