lcy
2026-06-11 1618f5f0a18aff64ec092ad1c8478f2840057b63
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
using System.Collections.Generic;
using UnityEngine;
 
public class GuildAtkDefBatAwardPreviewWin : FunctionsBaseWin
{
    [SerializeField] ScrollerController scroller;
 
    protected override void OpenSubUIByTabIndex()
    {
        int[][] awardData;
        if (functionOrder == 0)
            awardData = GuildAtkDefBatManager.Instance.guildLoseAward;
        else
            awardData = GuildAtkDefBatManager.Instance.guildWinAward;
 
        scroller.OnRefreshCell -= OnOuterRefreshCell;
        scroller.OnRefreshCompleteEvent -= OnOuterRefreshComplete;
        scroller.OnRefreshCell += OnOuterRefreshCell;
        scroller.OnRefreshCompleteEvent += OnOuterRefreshComplete;
        scroller.Refresh();
 
        // 1. 标题:GuildAtkDefBat13
        scroller.AddCell(ScrollerDataType.Header, 0);
 
        // 2. NomalCell(奖励物品列表),用 infoInt1 传 functionOrder 便于区分数据源
        CellInfo nomalInfo = new CellInfo(functionOrder, 0, null);
        scroller.AddCell(ScrollerDataType.Normal, 0, nomalInfo);
 
        // 3. 标题:GuildAtkDefBat14
        scroller.AddCell(ScrollerDataType.Header, 1);
 
        // 4. TailCell:先加普通品质(1),再遍历 qualityMaxOutput 其他品质 key 升序添加
        var qualityDict = GuildAtkDefBatManager.Instance.qualityMaxOutput;
        int maxGridCount = GuildAtkDefBatManager.Instance.CalculateMaxGridCount();
        int nonNormalTotal = GuildAtkDefBatManager.Instance.GetNonNormalQualityTotalOutput();
        // 4b. 遍历 qualityMaxOutput 动态添加其余品质的 TailCell
        if (qualityDict != null)
        {
            var keys = new List<int>(qualityDict.Keys);
            keys.Sort();
            keys.Reverse();
            for (int i = 0; i < keys.Count; i++)
            {
                int quality = keys[i];
                if (quality == 1) continue;
                CellInfo info = new CellInfo(quality, qualityDict[quality], null);
                info.SetInfo(functionOrder);
                scroller.AddCell(ScrollerDataType.Tail, quality, info);
            }
        }
 
        // 4a. 品质1(普通):最大产出数 = 最大总格子数 - 非普通品质总产出数,始终添加
        int normalMaxCount = maxGridCount - nonNormalTotal;
        CellInfo normalInfo = new CellInfo(1, normalMaxCount, null);
        normalInfo.SetInfo(functionOrder);
        scroller.AddCell(ScrollerDataType.Tail, 1, normalInfo);
 
        scroller.Restart();
    }
 
    void OnOuterRefreshComplete()
    {
        scroller.OnRefreshCell -= OnOuterRefreshCell;
        scroller.OnRefreshCompleteEvent -= OnOuterRefreshComplete;
    }
 
    void OnOuterRefreshCell(ScrollerDataType type, CellView cell)
    {
        switch (type)
        {
            case ScrollerDataType.Header:
                GuildAtkDefBatAwardPreviewHeaderCell headerCell = cell as GuildAtkDefBatAwardPreviewHeaderCell;
                if (headerCell != null)
                {
                    int headerIndex = cell.index;
                    string langKey = headerIndex == 0 ? "GuildAtkDefBat13" : "GuildAtkDefBat14";
                    headerCell.SetTitle(Language.Get(langKey));
                }
                break;
 
            case ScrollerDataType.Normal:
                GuildAtkDefBatAwardPreviewNomalCell nomalCell = cell as GuildAtkDefBatAwardPreviewNomalCell;
                if (nomalCell != null && cell.info.HasValue)
                {
                    int tabIndex = cell.info.Value.infoInt1;
                    int[][] awardData = tabIndex == 0
                        ? GuildAtkDefBatManager.Instance.guildLoseAward
                        : GuildAtkDefBatManager.Instance.guildWinAward;
                    nomalCell.SetData(awardData);
                }
                break;
 
            case ScrollerDataType.Tail:
                GuildAtkDefBatAwardPreviewTailCell tailCell = cell as GuildAtkDefBatAwardPreviewTailCell;
                if (tailCell != null && cell.info.HasValue)
                {
                    int quality = cell.info.Value.infoInt1;
                    int maxCount = cell.info.Value.infoInt2;
                    int tabIndex = cell.info.Value.infoInt3;
                    int libType = tabIndex == 0 ? 2 : 1;
                    tailCell.SetData(quality, maxCount, libType);
                }
                break;
        }
    }
}