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)); }
/// <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); }