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(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; } } }