예제 #1
0
    /// <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);
        }
    }
예제 #2
0
    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);
    }
예제 #3
0
 private void RemovePanel(BaseUIPanel panel)
 {
     if (PanelInAllPanelsList(panel))
     {
         allPanelsInScene.Remove(panel);
     }
 }
예제 #4
0
    /// <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();
    }
예제 #5
0
 public void ClosePanel(BaseUIPanel panel)
 {
     if (panel)
     {
         activePanels.Remove(panel);
         panel.CloseBehavior();
     }
 }
예제 #6
0
 /// <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);
     }
 }
예제 #7
0
 /// <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);
 }
예제 #8
0
 /// <summary>
 /// 显示UI
 /// </summary>
 /// <param name="uiPanel"></param>
 public void Show(UIPanel uiPanel)
 {
     if (currentShow != null)
     {
         currentShow.OnExit();
     }
     currentShow = uiBase[uiPanel];
     currentShow.DoScreen();
 }
예제 #9
0
 public void OpenPopUp(BaseUIPanel panel)
 {
     if (panel && panel.panelType == PanelType.PopUp)
     {
         HideNonPopUps();
         popUpsPanels.Add(panel);
         OpenPanel(panel);
     }
 }
예제 #10
0
 private void InjectPanel(BaseUIPanel panel)
 {
     if (!PanelInAllPanelsList(panel))
     {
         allPanelsInScene.Add(panel);
         if (panel.isOpen)
         {
             activePanels.Add(panel);
         }
     }
 }
예제 #11
0
 /*
  * 注册进这里的UI可以做层级管理
  * **/
 public int GetPanelTier(BaseUIPanel panel)
 {
     if (panelList.Contains(panel))
     {
         return(panelList.IndexOf(panel) + 1);
     }
     else
     {
         return(0);
     }
 }
예제 #12
0
    public void OpenPanel(BaseUIPanel panel)
    {
        if (panel)
        {
            if (!PanelInAllPanelsList(panel))
            {
                InjectPanel(panel);
            }

            panel.OpenBehavior();
        }
    }
예제 #13
0
 /*
  * 绑定一个父对象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);
     }
 }
예제 #14
0
    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);
    }
예제 #15
0
    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;
    }
예제 #16
0
    /// <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);
    }
예제 #17
0
 /// <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);
 }
예제 #18
0
 /*
  * 层级管理,加入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();
     }
 }
예제 #19
0
    /// <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);
    }
예제 #20
0
    /// <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();
    }
예제 #21
0
    /*
     * 层级管理,弹出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();
    }
예제 #22
0
 /// <summary>
 /// 销毁UI面板
 /// </summary>
 /// <param name="panel">指定被销毁的UI面板</param>
 public static void DestoryPanel(BaseUIPanel panel)
 {
     UIData.GetData.DestoryPanel(panel);
 }
예제 #23
0
 /// <summary>
 /// 放置UI面板到最顶部
 /// </summary>
 /// <param name="Panel">指定被放置的UI面板</param>
 public void TakePanelToTop(BaseUIPanel Panel)
 {
     TakePanelOnTop_in_StackTop(Panel);
     Panel.transform.SetAsLastSibling();
 }
예제 #24
0
 private void HidePanel(BaseUIPanel panel)
 {
     ClosePanel(panel);
     temporarilyHiddenPanels.Add(panel);
 }
예제 #25
0
 /// <summary>
 /// 关闭UI面板
 /// </summary>
 /// <param name="panel">指定被关闭的UI面板</param>
 public void ClosePanel(BaseUIPanel panel)
 {
     RemovePanel_in_Stack(panel);
     panel.gameObject.SetActive(false);
 }
예제 #26
0
 private bool PanelInAllPanelsList(BaseUIPanel panel)
 {
     return(allPanelsInScene.Contains(panel));
 }
예제 #27
0
 /// <summary>
 /// 关闭UI面板
 /// </summary>
 /// <param name="panel">指定被关闭的UI面板</param>
 public static void ClosePanel(BaseUIPanel panel)
 {
     UIData.GetData.ClosePanel(panel);
 }
예제 #28
0
 /// <summary>
 /// 显示UI面板
 /// </summary>
 /// <param name="panel">指定被显示的UI面板</param>
 public static void ShowPanel(BaseUIPanel panel)
 {
     UIData.GetData.ShowPanel(panel);
 }