using System.Collections.Generic;
|
using UnityEngine;
|
|
public class BattleDetailWin : UIBase
|
{
|
[SerializeField] ImageEx imgResultBlue;
|
[SerializeField] ImageEx imgResultRed;
|
[SerializeField] TextEx redName;
|
[SerializeField] TextEx blueName;
|
[SerializeField] List<BattleDetailHeroInfoItem> redList = new List<BattleDetailHeroInfoItem>();
|
[SerializeField] List<BattleDetailHeroInfoItem> blueList = new List<BattleDetailHeroInfoItem>();
|
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<BattleDetailHeroInfo> blueBattleDetailHeroInfoList = manager.GetHeroInfoByFaction(msg, blueFaction);
|
List<BattleDetailHeroInfo> redBattleDetailHeroInfoList = manager.GetHeroInfoByFaction(msg, redFaction);
|
DisplayDetail(blueList, blueBattleDetailHeroInfoList);
|
DisplayDetail(redList, redBattleDetailHeroInfoList);
|
}
|
|
public void DisplayDetail(List<BattleDetailHeroInfoItem> teamItemList, List<BattleDetailHeroInfo> 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<BattleDetailHeroInfo> 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 = nowInfo.AtkHurt + nowInfo.DefHurt + nowInfo.CureHP;
|
if (nowValue > mvpScore)
|
{
|
mvpIndex = i;
|
mvpScore = nowValue;
|
}
|
}
|
return mvpIndex;
|
}
|
|
public void GetMaxAttr(List<BattleDetailHeroInfo> 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 (nowInfo.AtkHurt > maxAtk)
|
maxAtk = nowInfo.AtkHurt;
|
if (nowInfo.DefHurt > maxDef)
|
maxDef = nowInfo.DefHurt;
|
if (nowInfo.CureHP > maxCure)
|
maxCure = nowInfo.CureHP;
|
}
|
}
|
}
|
public class BattleDetailHeroInfoItemData
|
{
|
public int index;
|
public int mvpIndex;
|
public ulong maxAtk;
|
public ulong maxDef;
|
public ulong maxCure;
|
public BattleDetailHeroInfo info;
|
}
|