lcy
2026-07-16 34179ffa10e510ba71522cb2bd1fd978b7fcbbe1
Main/System/GuildAtkDefBat/GuildAtkDefBatBattlePanelWin.cs
@@ -39,12 +39,20 @@
    private int m_CachedDisplayState;
    private List<HA525_tagSCFamilyAtkDefBatInfo.tagSCFamilyAtkDefBatMem> m_SortedDefenders;
    private List<HA525_tagSCFamilyAtkDefBatInfo.tagSCFamilyAtkDefBatMem> m_RemainingDefenders;
    private bool m_DeferBattleScrollerRefresh;
    private static bool s_HasPendingScrollPosition;
    private static float s_PendingScrollPosition;
    protected override void InitComponent()
    {
        base.InitComponent();
        funPresetDefBtn.AddListener(() =>
        {
            if (GuildAtkDefBatManager.Instance.GetGuildBattleDisplayState() == 3)
            {
                SysNotifyMgr.Instance.ShowTip("GuildAtkDefBat7");
                return;
            }
            FuncPresetManager.Instance.ClickBattlePreset((int)BattlePreSetType.GuildAtkDefBat);
        });
        funPresetAtkBtn.AddListener(() =>
@@ -101,7 +109,9 @@
        else if (displayState == 3)
            functionOrder = 1; // 激战期默认敌方战场
        m_DeferBattleScrollerRefresh = true;
        base.OnPreOpen();
        m_DeferBattleScrollerRefresh = false;
        scroller.OnRefreshCell += OnRefreshCell;
        GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
        GuildAtkDefBatManager.Instance.OnUpdateAtkDefBatInfoEvent += OnUpdateAtkDefBatInfoEvent;
@@ -125,6 +135,7 @@
    {
        OnDayRefresh();
        Display();
        RefreshBattleScroller(true);
    }
    private void OnDayRefresh()
@@ -162,6 +173,11 @@
    {
        DisplayInfo();
        DisplayTime();
    }
    protected override void NextFrameAfterOpen()
    {
        base.NextFrameAfterOpen();
        RefreshBattleScroller();
    }
@@ -188,7 +204,7 @@
            {
                string enemyName = Language.Get("GuildAtkDefBat31");
                enemyNameText.text = enemyName;
                enemyEmblemCell.Display(FamilyEmblemConfig.GetFirstDefaultEmblem(), !string.IsNullOrEmpty(enemyName) ? enemyName[0].ToString() : string.Empty, 0.7f);
                enemyEmblemCell.Display(FamilyEmblemConfig.GetFirstDefaultEmblem(), GuildManager.Instance.LimitEmblemWord(enemyName), 0.7f);
                enemyServerText.text = ServerListCenter.Instance.GetServerName(UIHelper.GetServerIDByAccount(PlayerDatas.Instance.baseData.AccID));
                enemyStarCntText.text = enemyFamilyInfo.TotalStar.ToString();
            }
@@ -214,7 +230,7 @@
    void ShowTop3()
    {
        atkCntImage.SetActive(GuildAtkDefBatManager.Instance.BatState == 3);
        atkCntImage.SetActive(GuildAtkDefBatManager.Instance.GetGuildBattleDisplayState() == 3);
        var sortedMembers = GuildAtkDefBatManager.Instance.GetSortedFamilyMembers();
        int top3Count = Mathf.Min(top3NameText.Length, sortedMembers.Count);
@@ -237,13 +253,62 @@
    protected override void OpenSubUIByTabIndex()
    {
        if (m_DeferBattleScrollerRefresh)
            return;
        RefreshBattleScroller();
    }
    public void SaveScrollPositionForNextOpen()
    {
        if (scroller == null || scroller.m_Scorller == null)
            return;
        s_PendingScrollPosition = scroller.m_Scorller.ScrollPosition;
        s_HasPendingScrollPosition = true;
    }
    /// <summary>
    /// 刷新战场Scroller数据
    /// </summary>
    private void RefreshBattleScroller()
    private void RefreshBattleScroller(bool keepScrollPosition = false)
    {
        int oldCellCount = scroller.GetNumberOfCells(scroller.m_Scorller);
        int newCellCount = RefreshBattleScrollerData();
        if (keepScrollPosition && oldCellCount == newCellCount)
        {
            scroller.m_Scorller.RefreshActiveCellViews();
            return;
        }
        // 重新构建Scroller
        scroller.Refresh();
        // 添加HeaderCell(第一条)
        scroller.AddCell(ScrollerDataType.Header, 0);
        // 剩余成员每2个一组添加NormalCell
        int normalCellCount = newCellCount - 1;
        for (int i = 0; i < normalCellCount; i++)
        {
            scroller.AddCell(ScrollerDataType.Normal, i + 1);
        }
        scroller.Restart();
        TryRestorePendingScrollPosition();
    }
    private void TryRestorePendingScrollPosition()
    {
        if (!s_HasPendingScrollPosition || scroller == null || scroller.m_Scorller == null)
            return;
        scroller.m_Scorller.ScrollPosition = s_PendingScrollPosition;
        s_HasPendingScrollPosition = false;
    }
    private int RefreshBattleScrollerData()
    {
        // 根据当前Tab设置己方/敌方
        switch (functionOrder)
@@ -274,21 +339,8 @@
            m_RemainingDefenders.Add(m_SortedDefenders[i]);
        }
        // 重新构建Scroller
        scroller.Refresh();
        // 添加HeaderCell(第一条)
        scroller.AddCell(ScrollerDataType.Header, 0);
        // 剩余成员每2个一组添加NormalCell
        int remainingCount = m_RemainingDefenders.Count;
        int normalCellCount = Mathf.CeilToInt((float)remainingCount / 2);
        for (int i = 0; i < normalCellCount; i++)
        {
            scroller.AddCell(ScrollerDataType.Normal, i + 1);
        }
        scroller.Restart();
        int normalCellCount = Mathf.CeilToInt((float)m_RemainingDefenders.Count / 2);
        return normalCellCount + 1;
    }
    /// <summary>