public static Panel OpenPanel(string panelName, IPanelMessager request = null)
        {
            PanelManager inst = Instance;

            if (inst == null)
            {
                return(null);
            }
            PanelAsset asset = inst.GetAsset(panelName);

            if (asset == null || !asset.IsUsable)
            {
                return(null);
            }
            else if (asset.Mode == EPanelMode.Dialog)
            {
                return(inst.OpenPanelAsDialog(asset, request));
            }
            else if (asset.Mode == EPanelMode.Status)
            {
                return(inst.OpenPanelAsStatus(asset));
            }
            else if (asset.Mode == EPanelMode.Normal)
            {
                return(inst.OpenPanelAsNormal(asset, request));
            }
            else
            {
                return(null);
            }
        }
 Panel OpenPanelAsNormal(PanelAsset asset, IPanelMessager request)
 {
     if (mDialogs.Count > 0)
     {
         return(null);
     }
     return(OpenPanelFor(mPanels, m_NormalSortingLayer, asset, request, true));
 }
        // asset must be usable.
        Panel OpenPanelFor(List <PanelStub> list, int sortLayer, PanelAsset asset, IPanelMessager request, bool useFocus)
        {
            Panel panel = asset.InstantiateAsset();

            if (panel == null || panel.IsClosing())
            {
                return(null);
            }
            bool open;

            if (request != null)
            {
                open = panel.OnPanelOpenForResult(request);
            }
            else
            {
                open = panel.OnPanelOpen();
            }
            if (!open)
            {
                asset.UnuseAsset(panel);
                return(null);
            }
            int close = GetPanelIndex(mClosing, panel);

            if (close != -1)
            {
                mClosing.RemoveAt(close);
            }
            panel.transform.SetParent(transform, false);

            int old = GetPanelIndex(list, panel);

            if (old != -1)
            {
                list.RemoveAt(old);
            }
            PanelStub stub = new PanelStub();

            stub.Asset    = asset;
            stub.Instance = panel;
            list.Add(stub);
            PanelStub prev    = GetRecentPanel(list, 1);
            Canvas    prevcan = prev == null ? null : prev.Instance.GetCanvas();
            Canvas    can     = panel.GetCanvas();

            can.renderMode     = RenderMode.ScreenSpaceCamera;
            can.worldCamera    = m_UICamera;
            can.sortingLayerID = sortLayer;
            can.sortingOrder   = prevcan == null ? 1 : prevcan.sortingOrder + 2;
            if (useFocus)
            {
                if (mFocusStub != null)
                {
                    mFocusStub.HasFocus = false;
                }
                mFocusStub          = stub;
                mFocusStub.HasFocus = true;
            }
            if (asset.IsUseMask)
            {
                UpdateMask();
            }
            return(panel);
        }
 Panel OpenPanelAsDialog(PanelAsset asset, IPanelMessager request)
 {
     return(OpenPanelFor(mDialogs, m_DialogSortingLayer, asset, request, true));
 }
Exemple #5
0
 /// <summary>
 /// 窗口接收消息
 /// </summary>
 /// <param name="request"></param>
 /// <param name="arg"></param>
 public virtual bool OnPanelOpenForResult(IPanelMessager sender)
 {
     return(true);
 }
 public override bool OnPanelOpenForResult(IPanelMessager sender)
 {
     Debug.LogFormat("{0} Open for Result {1}(sender:{2})", name, sender.RequestId, sender);
     gameObject.SetActive(true);
     return(true);
 }