using Cysharp.Threading.Tasks;
|
using UnityEngine;
|
|
public class GuildAtkDefBatChallengeWin : UIBase
|
{
|
[SerializeField] AvatarCell avatarCell;
|
[SerializeField] OfficialTitleCell officialTitle;
|
[SerializeField] HorseController horseModel;
|
[SerializeField] TextEx playerNameText;
|
[SerializeField] TextEx fightPowerText;
|
[SerializeField] GuildAtkDefBatChallengeDifficulty[] difficultys;
|
[SerializeField] TextEx dWinCntText; // 防守胜利次数
|
[SerializeField] ButtonEx viewDetailsButton;
|
[SerializeField] ImageEx[] starGruoupImages; // 持有星数
|
|
private static HA525_tagSCFamilyAtkDefBatInfo.tagSCFamilyAtkDefBatMem s_TargetMem;
|
private HA525_tagSCFamilyAtkDefBatInfo.tagSCFamilyAtkDefBatMem targetMem;
|
|
public static void Open(HA525_tagSCFamilyAtkDefBatInfo.tagSCFamilyAtkDefBatMem mem)
|
{
|
s_TargetMem = mem;
|
UIManager.Instance.OpenWindow<GuildAtkDefBatChallengeWin>();
|
}
|
|
protected override void InitComponent()
|
{
|
base.InitComponent();
|
viewDetailsButton.SetListener(OnClickViewDetails);
|
}
|
|
protected override void OnPreOpen()
|
{
|
base.OnPreOpen();
|
targetMem = s_TargetMem;
|
if (targetMem == null)
|
{
|
CloseWindow();
|
return;
|
}
|
|
Display();
|
}
|
|
protected override void OnPreClose()
|
{
|
base.OnPreClose();
|
if (ReferenceEquals(s_TargetMem, targetMem))
|
{
|
s_TargetMem = null;
|
}
|
}
|
|
private void Display()
|
{
|
avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)targetMem.PlayerID, (int)targetMem.Face, (int)targetMem.FacePic, targetMem.Job));
|
avatarCell.SetListener(OnClickViewDetails);
|
|
officialTitle.InitUI(targetMem.RealmLV, (int)targetMem.TitleID);
|
horseModel.Create(
|
HorseManager.Instance.GetOtherPlayerHorseSkinID((int)targetMem.EquipShowSwitch),
|
ResolveHeroSkinID((int)targetMem.ModelMark, targetMem.Job),
|
0.8f);
|
|
playerNameText.text = UIHelper.ServerStringTrim(targetMem.Name);
|
fightPowerText.text = UIHelper.ReplaceLargeArtNum(GuildAtkDefBatManager.CalcTotalFightPower(targetMem.FightPower, targetMem.FightPowerEx));
|
dWinCntText.text = Language.Get("GuildAtkDefBat42", targetMem.DWinCnt);
|
|
DisplayStars();
|
DisplayDifficulties();
|
}
|
|
private void DisplayStars()
|
{
|
int[] starList = FamilyAtkDefBatDefenderConfig.GetDefStarList(targetMem.DefType);
|
if (starList == null || starList.Length == 0) return;
|
|
// 统计总星数
|
int totalStars = 0;
|
for (int i = 0; i < starList.Length; i++)
|
totalStars += starList[i];
|
|
// 统计被击杀的总星数(从右往左扣)
|
int darkStarCount = 0;
|
for (int difficultyIndex = 0; difficultyIndex < starList.Length; difficultyIndex++)
|
{
|
if (GuildAtkDefBatManager.Instance.IsPropertyKilled(targetMem.KilledState, difficultyIndex))
|
darkStarCount += starList[difficultyIndex];
|
}
|
int litStarCount = totalStars - darkStarCount;
|
|
int displayCount = Mathf.Min(totalStars, starGruoupImages.Length);
|
for (int starPos = 0; starPos < displayCount; starPos++)
|
{
|
string icon = starPos < litStarCount ? "GuildAtkDefBatStarLight" : "GuildAtkDefBatStarDark";
|
starGruoupImages[starPos].SetActive(true);
|
starGruoupImages[starPos].SetSprite(icon);
|
}
|
|
for (int i = displayCount; i < starGruoupImages.Length; i++)
|
{
|
starGruoupImages[i].SetActive(false);
|
}
|
}
|
|
private void DisplayDifficulties()
|
{
|
var config = FamilyAtkDefBatDefenderConfig.Get(targetMem.DefType);
|
|
for (int i = 0; i < difficultys.Length; i++)
|
{
|
bool isKilled = GuildAtkDefBatManager.Instance.IsPropertyKilled(targetMem.KilledState, i);
|
difficultys[i].Display(i, config.DefBaseAttrPerList[i], config.DefStarList[i], isKilled, OnClickChallenge);
|
}
|
}
|
|
private void OnClickViewDetails()
|
{
|
AvatarHelper.TryViewOtherPlayerInfo((int)targetMem.PlayerID, (int)targetMem.ServerID, viewPlayerLineupType: (int)BattlePreSetType.GuildAtkDefBat);
|
}
|
|
private void OnClickChallenge(int difficultyIndex, int defBaseAttrPer)
|
{
|
var manager = GuildAtkDefBatManager.Instance;
|
|
int displayState = manager.GetGuildBattleDisplayState();
|
if (displayState != 3)
|
{
|
ScrollTip.ShowTip("Guild attack-defense battle is not active");
|
return;
|
}
|
|
if (!manager.HasMyJoinEligibility())
|
{
|
SysNotifyMgr.Instance.ShowTip("GuildAtkDefBat1");
|
return;
|
}
|
|
if (manager.GetMyRemainingChallengeCount() <= 0)
|
{
|
ScrollTip.ShowTip("Challenge is unavailable");
|
return;
|
}
|
|
if (manager.IsPropertyKilled(targetMem.KilledState, difficultyIndex))
|
{
|
ScrollTip.ShowTip("Challenge is unavailable");
|
DisplayDifficulties();
|
return;
|
}
|
|
GuildAtkDefBatManager.Instance.CurrentChallengeTargetPlayerID = targetMem.PlayerID;
|
BattleManager.Instance.SendTurnFight(
|
(uint)GuildAtkDefBatManager.DataMapID,
|
0,
|
1,
|
targetMem.PlayerID,
|
new[] { (uint)defBaseAttrPer, 0u });
|
CloseWindow();
|
}
|
|
private int ResolveHeroSkinID(int modelMark, int job)
|
{
|
if (modelMark == 0)
|
{
|
PhantasmPavilionManager.Instance.TryGetDefaultID(PhantasmPavilionType.Model, job, out modelMark);
|
}
|
|
if (!ModelConfig.HasKey(modelMark))
|
{
|
return 0;
|
}
|
|
return ModelConfig.Get(modelMark).SkinID;
|
}
|
}
|