using System.Collections.Generic; using UnityEngine; public class BattleDetailWin : UIBase { [SerializeField] ImageEx imgResultBlue; [SerializeField] ImageEx imgResultRed; [SerializeField] TextEx redName; [SerializeField] TextEx blueName; [SerializeField] List redList = new List(); [SerializeField] List blueList = new List(); BattleSettlementManager manager { get { return BattleSettlementManager.Instance; } } protected override void OnPreOpen() { Display(); } public void Display() { BattleDetailMsg msg = manager.msg; if (msg == null) return; string battleName = manager.BattleDetailBattleName; string blueFaction = manager.GetFaction(true); string redFaction = manager.GetFaction(false); string myName = PlayerDatas.Instance.baseData.PlayerName; string enemyName = manager.GetBattleDetailEnemyNameByMyStart(battleName); blueName.text = myName; redName.text = enemyName; bool isTianzi = battleName == BattleConst.TianziBillboradBattleField; imgResultBlue.SetSprite(isTianzi ? "BattleDetailWin" : msg.winFaction.ToString() == blueFaction ? "BattleDetailWin" : "BattleDetailFail"); imgResultRed.SetSprite(isTianzi ? "BattleDetailFail" : msg.winFaction.ToString() == redFaction ? "BattleDetailWin" : "BattleDetailFail"); List blueBattleDetailHeroInfoList = manager.GetHeroInfoByFaction(msg, blueFaction); List redBattleDetailHeroInfoList = manager.GetHeroInfoByFaction(msg, redFaction); DisplayDetail(blueList, blueBattleDetailHeroInfoList); DisplayDetail(redList, redBattleDetailHeroInfoList); } public void DisplayDetail(List teamItemList, List infoList) { int mvpIndex = GetMvpIndex(infoList); GetMaxAttr(infoList, out ulong maxAtk, out ulong maxDef, out ulong maxCure); for (int i = 0; i < teamItemList.Count; i++) { if (i < infoList.Count) { teamItemList[i].SetActive(true); teamItemList[i].Display(new BattleDetailHeroInfoItemData() { index = i, mvpIndex = mvpIndex, maxAtk = maxAtk, maxDef = maxDef, maxCure = maxCure, info = infoList[i], }); } else { teamItemList[i].SetActive(false); } } } public int GetMvpIndex(List infos) { if (infos.IsNullOrEmpty()) return -1; int mvpIndex = -1; ulong mvpScore = 0; for (int i = 0; i < infos.Count; i++) { BattleDetailHeroInfo nowInfo = infos[i]; ulong nowValue = (ulong)nowInfo.AtkHurt + (ulong)nowInfo.DefHurt + (ulong)nowInfo.CureHP; if (nowValue > mvpScore) { mvpIndex = i; mvpScore = nowValue; } } return mvpIndex; } public void GetMaxAttr(List infos, out ulong maxAtk, out ulong maxDef, out ulong maxCure) { maxAtk = 0; maxDef = 0; maxCure = 0; if (infos.IsNullOrEmpty()) return; for (int i = 0; i < infos.Count; i++) { BattleDetailHeroInfo nowInfo = infos[i]; if ((ulong)nowInfo.AtkHurt > maxAtk) maxAtk = (ulong)nowInfo.AtkHurt; if ((ulong)nowInfo.DefHurt > maxDef) maxDef = (ulong)nowInfo.DefHurt; if ((ulong)nowInfo.CureHP > maxCure) maxCure = (ulong)nowInfo.CureHP; } } } public class BattleDetailHeroInfoItemData { public int index; public int mvpIndex; public ulong maxAtk; public ulong maxDef; public ulong maxCure; public BattleDetailHeroInfo info; }