492 对跳脸类窗口按名去重,结算类窗口不去重。修复断线重连重复显示同一个跳脸界面问题
1个文件已修改
23 ■■■■■ 已修改文件
Main/Component/UI/Common/PopupWindowsProcessor.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Component/UI/Common/PopupWindowsProcessor.cs
@@ -11,6 +11,18 @@
    // 弹窗队列,存储待处理的弹窗请求
    List<PopupWindow> popupWindowQueue = new List<PopupWindow>();
    // 跳脸类窗口白名单:这类窗口每天/每事件只应弹一次,按窗口名去重;
    // 结算类窗口(同名承载不同战斗数据、可连续多场)不在此列,不做去重。
    private static readonly HashSet<string> DeduplicateWindowNames = new HashSet<string>
    {
        "FirstChargeWin",
        "FestivalActivityPopWin",
        "HeroDebutPopWin",
        "HeroReturnPopWin",
        "SignWin",
        "GoodReviewWin",
    };
    // 当前正在显示的弹窗
    PopupWindow currentWindow;
@@ -37,9 +49,16 @@
            functionId = functionId,
        };
        if (popupWindowQueue.Contains(popupWindow))
        // 仅对跳脸类窗口按名去重;结算类窗口同名承载不同战斗,保留重复入队
        if (DeduplicateWindowNames.Contains(name))
        {
            popupWindowQueue.Remove(popupWindow);
            for (int i = popupWindowQueue.Count - 1; i >= 0; i--)
            {
                if (popupWindowQueue[i].window == name)
                {
                    popupWindowQueue.RemoveAt(i);
                }
            }
        }
        popupWindowQueue.Add(popupWindow);