using System.Collections; using System.Collections.Generic; using UnityEngine; using vnxbqy.UI; public class PopupWindowsProcessor : SingletonMonobehaviour { List popupWindowQueue = new List(); PopupWindow currentWindow; float lastTime = 0; //上次弹窗时间 public void Add(string name, int functionId = 0) { var popupWindow = new PopupWindow() { window = name, functionId = functionId, }; if (popupWindowQueue.Contains(popupWindow)) { popupWindowQueue.Remove(popupWindow); } popupWindowQueue.Add(popupWindow); } public void Remove(string name, int functionId = 0) { var popupWindow = new PopupWindow() { window = name, functionId = functionId, }; if (popupWindowQueue.Contains(popupWindow)) { popupWindowQueue.Remove(popupWindow); } } private void LateUpdate() { //打开窗口需要时间,不然会导致队列中的窗口全部同时打开 if (Time.realtimeSinceStartup - lastTime < 1) return; if (StageLoad.Instance.isLoading) { return; } if (StageLoad.Instance.currentStage == null) { return; } if (StageLoad.Instance.stageType == Stage.E_StageType.MainCity) { return; } if (MapUtility.IsDungeon(PlayerDatas.Instance.baseData.MapID)) { return; } if (NewBieCenter.Instance.inGuiding) { return; } if (popupWindowQueue.Count == 0) { return; } if (currentWindow != default(PopupWindow)) { if (!WindowCenter.Instance.IsOpen(currentWindow.window) && !WindowCenter.Instance.ExistAnyFullScreenOrMaskWin()) { currentWindow = popupWindowQueue[0]; popupWindowQueue.RemoveAt(0); WindowCenter.Instance.Open(currentWindow.window, false, currentWindow.functionId); lastTime = Time.realtimeSinceStartup; } } else { if (!WindowCenter.Instance.ExistAnyFullScreenOrMaskWin()) { currentWindow = popupWindowQueue[0]; popupWindowQueue.RemoveAt(0); WindowCenter.Instance.Open(currentWindow.window, false, currentWindow.functionId); } } } public struct PopupWindow { public string window; public int functionId; public static bool operator ==(PopupWindow lhs, PopupWindow rhs) { return lhs.window == rhs.window && lhs.functionId == rhs.functionId; } public static bool operator !=(PopupWindow lhs, PopupWindow rhs) { return lhs.window != rhs.window || lhs.functionId != rhs.functionId; } } }