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] TextEx 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 = $"+{addStar}";
|
}
|
|
int funcId = (int)FuncOpenEnum.GuildAtkDefBat;
|
txtFuncName.text = FuncOpenLVConfig.HasKey(funcId) ? FuncOpenLVConfig.Get(funcId).Name : string.Empty;
|
}
|
|
List<Item> showItems = new List<Item>();
|
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);
|
}
|
}
|