/// <summary> /// 隐藏GrayScreen, /// </summary> /// <param name="wnd"></param> public static void HideGrayScreen(UI3Wnd wnd) { if (wnd == null || wnd.gameObject == null || wnd.WndType != UI3WndType.PopUp || wnd.GetClassName() == "UIGrayScreen") { return; } UIGrayScreen grayWnd = findWindow <UIGrayScreen>(); if (grayWnd == null) { return; } string panelLayer = GetPanelLayer(wnd.GetClassName()); UIStack <string> stack = GetStackByPanelLayer(panelLayer); if (stack == null) { return; } UI3Wnd lastWnd = GetLastGrayScreen(stack); if (lastWnd == null) { grayWnd.setActive(false); } else { ShowGrayScreen(lastWnd); } }
/// <summary> /// 根据不同layer,进行入栈,当栈中已经有这个界面,不入栈,isPushBack属性,用于控制是否需要栈管理,例如,GrayScreen不需要栈管理, /// </summary> /// <param name="name"></param> public static void PushBack(string name) { if (string.IsNullOrEmpty(name) == true) { return; } string panelLayer = GetPanelLayer(name); UIStack <string> stack = GetStackByPanelLayer(panelLayer); if (stack == null) { return; } if (stack.Have(name)) { return; } else if (stack.Have(GetValid(name, true))) { UIStackBringTop(name); return; } UIResInfoAsset resInfo = GetUIResInfoAsset(name); stack.DisplayList(); OnPushBack(resInfo, stack); stack.DisplayList(); }
public void PopUI(string kPrefabName, UIType utype = UIType.FullScreen) { if (!this.ReorganizePush(kPrefabName)) { this.AddToStack(new UIStack { Node = UINodesManager.NormalUIRoot, prefabName = kPrefabName, type = utype }); } UIStack uIStack = this.m_listUIStacks.Find((UIStack e) => e.prefabName == kPrefabName); if (uIStack != null) { if (uIStack.type == UIType.Pop) { this.PopUILast_FullScreen(); } else if (!UIManagerControl.Instance.IsOpen(uIStack.prefabName)) { UIManagerControl.Instance.OpenUI(uIStack.prefabName, uIStack.Node, false, uIStack.type); } } }
/// <summary> /// 出栈需要返回界面(栈顶),显示界面, /// </summary> /// <param name="wnd"></param> public static void BackPopup(string name) { UI3WndType type = GetWndType(name); if (UI3WndType.ReturnFullScreen != type) { return; } UIStack <string> stack = GetStackByWndName(name); string lastName = Peek(stack); lastName = GetValid(lastName, false); stack.DisplayList(); if (string.IsNullOrEmpty(lastName) == true) { return; } UI3Wnd wnd = createWindow(lastName); if (wnd == null) { return; } int index = stack.FindLastByName(GetValid(lastName, true)); stack.PopAt(index); wnd.show(); stack.DisplayList(); }
public void SetOwningStack(UIStack stack) { if (owningStack != null) { throw new System.InvalidOperationException("This element has already been asigned to a stack"); } this.owningStack = stack; }
/// <summary> /// 对加载好的预制做处理 /// </summary> /// <param name="asetName"></param> /// <param name="go"></param> void OnAssetProcess(string asetName, GameObject go) { mLoading = false; mMenuObject = go; mMenuObject.transform.SetParent(parentTransform == null ? mDMono.transform.parent : parentTransform); mMenuObject.transform.position = Vector3.zero; mMenuObject.transform.localScale = Vector3.one; mMenuObject.transform.rotation = Quaternion.identity; mMenu = mMenuObject.GetComponent <UIController>(); if (mMenu != null) { mMenu.MCurrentViewName = asetName; mMenu.destroyHandler = new System.Action <UIController>(DestroyMenuHandler); } if (mShow) { if (mMenu != null) { mMenu.SetMenuData(mParam); mMenu.PlayTween(); if (mQueue) { mMenu.Queue(); } else { mMenu.Open(); } } else { mMenuObject.CustomSetActive(true); mMenuObject.BroadcastMessage("SetMenuData", mParam, SendMessageOptions.DontRequireReceiver); } } else { if (mMenu != null) { UIStack.Close(mMenu); } else { mMenuObject.CustomSetActive(false); } } if (mOnReady != null) { mOnReady(mMenuObject); mOnReady = null; } GlobalMenuManager.Instance.OpenUIEnd(menuPrefabName); }
public void PopUIIfTarget(string prefab) { UIStack theLastUIStack = this.GetTheLastUIStack(); if (theLastUIStack != null && theLastUIStack.prefabName.Equals(prefab)) { this.PopUIRemovePop(); } }
public static void SetTop(string name) { string panelLayer = GetPanelLayer(name); UIStack <string> stack = GetStackByPanelLayer(panelLayer); if (stack == null) { return; } stack.SetTop(name); }
public static void ClearStack(string name) { string panelLayer = GetPanelLayer(name); UIStack <string> stack = GetStackByPanelLayer(panelLayer); if (stack == null) { return; } stack.Clear(); }
public virtual void Pop(bool destroy) { if (owningStack.Pop(this)) { owningStack = null; } if (destroy) { Destroy(gameObject); } }
public static void ClearStack(UI3WndPanelLayerType type) { string panelLayer = type.ToString(); UIStack <string> stack = GetStackByPanelLayer(panelLayer); if (stack == null) { return; } stack.Clear(); }
/// <summary> /// 获取上一个bringTop界面 /// </summary> /// <param name="stack"></param> /// <returns></returns> public static string Peek(UIStack <string> stack) { //string lastStr = ""; //List<string> list = stack.List; //if(list != null || list.Count > 0) //{ // for(int i = list.Count - 1; i >= 0;i--) // { // UI3Wnd curWnd = findWindow(list[i]); // if(curWnd != null && curWnd.isBringTop == true) // return lastStr = curWnd.GetClassName(); // } //} return(stack.Peek()); }
/// <summary> /// 出栈指定元素,不会返回之前的元素, /// </summary> public static bool CanPopBack(string name, int index, UIStack <string> stack) { if (index < 0 || stack == null) { return(false); } string nextName = stack.Peek(index + 1); if (string.IsNullOrEmpty(nextName) == true) { return(true); } UI3WndType wndType = GetWndType(nextName); return(wndType != UI3WndType.ReturnFullScreen); }
/// <summary> /// 获取上一个Popup类型的界面, /// </summary> /// <param name="stack"></param> /// <returns></returns> public static UI3Wnd GetLastGrayScreen(UIStack <string> stack) { UI3Wnd lastWnd = null; List <string> list = stack.List; if (list != null || list.Count > 0) { for (int i = list.Count - 1; i >= 0; i--) { UI3Wnd curWnd = findWindow(list[i]); if (curWnd != null && curWnd.WndType == UI3WndType.PopUp && curWnd.gameObject.activeInHierarchy == true) { return(lastWnd = curWnd); } } } return(lastWnd); }
/// <summary> /// 入栈完成之后操作, /// 需要注意,这些步骤不能修改,修改的话,会有问题, /// 步骤1,打开ReturnFullScreen界面时候,需要先复制栈顶界面在入栈本界面, /// 步骤2,打开全屏界面时候需要隐藏之前接口,同时隐藏PopUp layer之前所有界面, /// 步骤3,打开DonotReturnFullScreen界面时候,清空栈, /// 步骤4,入栈该界面,这个时候只有一个界面, /// </summary> /// <param name="wnd"></param> public static void OnPushBack(UIResInfoAsset resInfoAsset, UIStack <string> stack = null) { stack = stack == null?GetStackByPanelLayer(resInfoAsset.layerType.ToString()) : stack; if (stack == null) { return; } stack.DisplayList(); UI3WndType wndType = (UI3WndType)resInfoAsset.wndType; //步骤1,打开ReturnFullScreen界面时候,需要先复制栈顶界面在入栈本界面, if (wndType == UI3WndType.ReturnFullScreen) { string lastT = stack.Peek(); lastT = GetValid(lastT, true); if (stack.Have(lastT) == false) { stack.PushBack(lastT); } } //步骤2,打开全屏界面时候需要隐藏之前接口,同时隐藏PopUp layer之前所有界面, if (wndType == UI3WndType.ReturnFullScreen || wndType == UI3WndType.DonotReturnFullScreen) { HideStackWindows(resInfoAsset.layerType, resInfoAsset.name); } //步骤3,打开DonotReturnFullScreen界面时候,清空栈, if (wndType == UI3WndType.DonotReturnFullScreen) { //当前layer栈clear, stack.Clear(); } //步骤4,入栈该界面,这个时候只有一个界面, if (GetIsPushStack(resInfoAsset.name) == true) { stack.PushBack(resInfoAsset.name); } }
/// <summary> /// shortcut for UIStack.Open /// </summary> public void Open() { if (this.gameObject != null) { EB.Debug.LogUI("执行【<color=#00ff00>{0}</color>】预设UIController中<color=#42fe79>Open</color>方法", this.gameObject.name); } if (UIStack.Instance != null && UIStack.Instance.gameObject.activeSelf) { UIStack.Open(this); //ToDo:暂时屏蔽 //if (GlobalMenuManager.Instance != null && gameObject != null) //{ // GlobalMenuManager.Instance.SetUIEnabled(MCurrentViewName, true); //} if (gameObject != null) { GlobalUtils.CallStaticHotfix("Hotfix_LT.UI.GlobalMenuManager", "SetUIEnabledFromILR", MCurrentViewName, true); } } }
public static void HideStackWindows(string layerType, string name = null) { UIStack <string> stack = GetStackByPanelLayer(layerType); if (stack == null) { return; } for (int i = 0; i < stack.List.Count; i++) { string strVal = stack.List[i]; if (string.IsNullOrEmpty(name) == false && name.Equals(strVal)) { continue; } UI3Wnd curWnd = findWindow(strVal); if (curWnd != null && curWnd.isHideOnFullScreen == true) { curWnd.hide(); } } }
protected void OnLoadAndPlace(GameObject placed) { if (placed == null) { return; } IStackableUI stackable = (IStackableUI)placed.GetComponent(typeof(IStackableUI)); if (stackable != null && stackable.EnstackOnCreate) { if (UIStack.Instance.IsLoadingScreenUp || UIStack.Instance.IsWaittingScreenUp) { UIStack.Queue(stackable); } else { UIStack.Open(stackable); } } SetHudShow(); }
/// <summary> /// shortcut for UIStack.Close /// </summary> public void Close() { if (this.gameObject != null) { EB.Debug.LogUI("执行【<color=#00ff00>{0}</color>】预设UIController中<color=#ff0000>Close</color>方法", this.gameObject.name); } if (UIStack.Instance != null && UIStack.Instance.gameObject.activeSelf) { UIStack.Close(this); //ToDo:暂时屏蔽 //if (GlobalMenuManager.Instance != null && gameObject != null) //{ // GlobalMenuManager.Instance.SetUIEnabled(MCurrentViewName, false); //} if (gameObject != null) { GlobalUtils.CallStaticHotfix("Hotfix_LT.UI.GlobalMenuManager", "SetUIEnabledFromILR", MCurrentViewName, false); } } IsFirstLoad = false; HasPlayedTween = false; }
/// <summary> /// 根据不同layer,出栈,在获取上一个bringTop界面,在进行bringTop操作, /// 该方法只适用于ReturnFullScreen界面, /// </summary> /// <param name="name"></param> public static void PopBack(string name) { if (IsVaild(name, false) == false) { return; } string panelLayer = GetPanelLayer(name); UIStack <string> stack = GetStackByPanelLayer(panelLayer); if (stack == null) { return; } stack.DisplayList(); int index = stack.FindFirstByName(name); if (index < 0) { return; } //if(CanPopBack(name,index,stack) == false) // return; bool isTop = stack.IsTop(name); bool isPopup = true; UI3Wnd wnd = findWindow(name); if (wnd != null) { isPopup = wnd.isHideOnFullScreen; } if (isPopup == false) { return; } stack.PopAt(index); }
private void AddToStack(UIStack uistack) { this.m_listUIStacks.Add(uistack); }
/// <summary> /// bringTop当前栈界面, /// </summary> /// <param name="name"></param> public static void UIStackBringTop(string name, bool isClearStack = false) { string panelLayer = GetPanelLayer(name); UIStack <string> stack = GetStackByPanelLayer(panelLayer); if (stack == null) { return; } stack.DisplayList(); string pushName = GetValid(name, true); if (stack.Have(name) == false && stack.Have(pushName) == false) { return; } if (stack.IsTop(name) == true) { return; } /**** * * UI3WndType wndType = UI3WndType.None; * UI3WndType nextWndType = UI3WndType.None; * //UI3WndType lastWndType = UI3WndType.None; * int nextIndex = -1; * wndType = GetWndType(name); * int index = stack.FindFirstByName(name); * if (index < 0) * return; * string nextName = stack.FindDifferenct(index,name,out nextIndex); * if(string.IsNullOrEmpty(nextName) == false) * { * nextWndType = GetWndType(nextName); * int lastIndex = -1; * string lastName = stack.FindDifferenct(index,name,out lastIndex,false); * if (nextWndType == UI3WndType.ReturnFullScreen) * { * if (lastIndex < 0) * { * stack.PopAt(nextIndex - 1); * } * else * { * stack.SetAt(nextIndex - 1,lastName); * } * } * } * stack.PopAt(index); * if (wndType == UI3WndType.ReturnFullScreen) * { * stack.PopAt(index - 1); * } ** ****/ //当前界面存在,当前复制界面存在, if (stack.Have(name) && stack.Have(pushName)) { int index = stack.FindFirstByName(name); string lastName = stack.Peek(index - 1); //上一个界面不为空,上一个界面没有被复制,需要被复制, if (string.IsNullOrEmpty(lastName) == false && IsVaild(lastName, true) == false) { stack.SetAt(index, GetValid(lastName, true)); } } //只是当前界面存在,同时,上一个元素是当前界面的复制界面,所以需要清除复制界面, else if (stack.Have(name)) { int index = stack.FindFirstByName(name); string lastName = stack.Peek(index - 1); if (string.IsNullOrEmpty(lastName) == false && IsVaild(lastName, true) == true) { stack.PopAt(lastName); } } //只是当前界面复制界面存在,需要判断上一个界面是否被复制,没有复制就复制上一个界面, else { int index = stack.FindFirstByName(pushName); string lastName = stack.Peek(index - 1); if (string.IsNullOrEmpty(lastName) == false && IsVaild(lastName, true) == false) { stack.SetAt(index, GetValid(lastName, true)); } } //出栈当前界面原界面和复制界面, stack.PopAt(name); stack.PopAt(pushName); PushBack(name); stack.DisplayList(); }
private void RemoveFromStack(UIStack uistack) { this.m_listUIStacks.Remove(uistack); }