using LitJson; using UnityEngine; using Cysharp.Threading.Tasks; using System.Collections.Generic; public class GuildAtkDefBatVictoryWin : UIBase { [SerializeField] AvatarCell myAvatar; [SerializeField] AvatarCell enemyAvatar; [SerializeField] TextEx myNameText; [SerializeField] TextEx enemyNameText; [SerializeField] RichText scoreText; [SerializeField] TextEx txtFuncName; [SerializeField] ScrollerController scroller; [SerializeField] ButtonEx detailBtn; JsonData jsonData; string battleName = BattleConst.GuildAtkDefBatField; bool isSweepVictory = false; protected override void InitComponent() { detailBtn.SetListener(() => { BattleSettlementManager.Instance.OpenBattleDetailWin(battleName); }); } protected override void OnPreOpen() { base.OnPreOpen(); scroller.OnRefreshCell += OnRefreshCell; // 读取后立即重置,避免影响后续挑战 isSweepVictory = GuildAtkDefBatManager.Instance.isSweepVictory; GuildAtkDefBatManager.Instance.isSweepVictory = false; if (isSweepVictory) { // 扫荡模式:不显示详情按钮 detailBtn.SetActive(false); Display(); CreateScroller(); } else { jsonData = BattleSettlementManager.Instance.GetBattleSettlement(battleName); if (jsonData == null) { DelayCloseWindow().Forget(); return; } Display(); CreateScroller(); } } protected override void OnPreClose() { base.OnPreClose(); scroller.OnRefreshCell -= OnRefreshCell; if (isSweepVictory) { // 扫荡模式:不调用 WinShowOver(无战报数据需要清理) } else { BattleSettlementManager.Instance.WinShowOver(battleName); } } // B4 20 回合制战斗状态 #tagMCTurnFightState 通用的结算状态 State 4-结算奖励 // Msg 中额外信息 // "tagID":对战的目标ID, // "addStar":增加的星数, // itemInfo:奖励物品列表,可能为空 void Display() { uint tagID; if (isSweepVictory) { // 扫荡模式:从 Manager 缓存获取目标ID tagID = GuildAtkDefBatManager.Instance.sweepTagID; if (tagID == 0) return; } else { if (!jsonData.ContainsKey("tagID")) return; tagID = (uint)(int)jsonData["tagID"]; } // 我方数据 uint myPlayerID = PlayerDatas.Instance.PlayerId; GuildAtkDefBatManager.Instance.MyFamilyMembers.TryGetValue(myPlayerID, out var myMem); // 敌方数据 GuildAtkDefBatManager.Instance.EnemyFamilyMembers.TryGetValue(tagID, out var enemyMem); int myFace = myMem != null ? (int)myMem.Face : PlayerDatas.Instance.baseData.face; int myFacePic = myMem != null ? (int)myMem.FacePic : PlayerDatas.Instance.baseData.facePic; myAvatar.InitUI(AvatarHelper.GetAvatarModel((int)myPlayerID, myFace, myFacePic)); int enemyFace = enemyMem != null ? (int)enemyMem.Face : 0; int enemyFacePic = enemyMem != null ? (int)enemyMem.FacePic : 0; enemyAvatar.InitUI(AvatarHelper.GetAvatarModel((int)tagID, enemyFace, enemyFacePic)); enemyAvatar.SetListener(() => { int serverID = enemyMem != null ? (int)enemyMem.ServerID : 0; AvatarHelper.TryViewOtherPlayerInfo((int)tagID, serverID, viewPlayerLineupType: (int)BattlePreSetType.GuildAtkDefBat); }); myNameText.text = myMem != null ? UIHelper.ServerStringTrim(myMem.Name) : PlayerDatas.Instance.baseData.PlayerName; enemyNameText.text = enemyMem != null ? UIHelper.ServerStringTrim(enemyMem.Name) : ""; if (isSweepVictory) { // 扫荡模式:不显示加的星数 scoreText.SetActive(false); } else { // 显示增加的星数(星星图标 + 数值) scoreText.SetActive(true); int addStar = jsonData.ContainsKey("addStar") ? (int)jsonData["addStar"] : 0; scoreText.text = Language.Get("GuildAtkDefBat22", "GuildAtkDefBatBattleEx_img_47", addStar); } int funcId = (int)FuncOpenEnum.GuildAtkDefBat; txtFuncName.text = FuncOpenLVConfig.HasKey(funcId) ? FuncOpenLVConfig.Get(funcId).Name : string.Empty; } List showItems = new List(); void CreateScroller() { showItems.Clear(); scroller.Refresh(); if (isSweepVictory) { // 扫荡模式:从 Manager 缓存获取奖励数据 var sweepItems = GuildAtkDefBatManager.Instance.sweepItemInfos; if (sweepItems != null && sweepItems.Count > 0) { showItems.AddRange(sweepItems); } else { scroller.Restart(); return; } } else { if (!jsonData.ContainsKey("itemInfo")) { scroller.Restart(); return; } var resultStr = jsonData["itemInfo"]; for (int i = 0; i < resultStr.Count; i++) { showItems.Add(new Item((int)resultStr[i]["ItemID"], (long)resultStr[i]["Count"])); } } showItems.Sort(SortItem); for (int i = 0; i < showItems.Count; i++) { scroller.AddCell(ScrollerDataType.Header, i); } scroller.Restart(); } int SortItem(Item itemA, Item itemB) { var itemConfigA = ItemConfig.Get(itemA.id); var itemConfigB = ItemConfig.Get(itemB.id); return itemConfigB.ItemColor - itemConfigA.ItemColor; } void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell as SettlementAwardCell; var item = showItems[cell.index]; _cell?.Display(item.id, item.countEx); } }