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.OpenWindowAsync().Forget(); } 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)).Forget(); avatarCell.SetListener(OnClickViewDetails); officialTitle.InitUI(targetMem.RealmLV, (int)targetMem.TitleID).Forget(); horseModel.Create( HorseManager.Instance.GetOtherPlayerHorseSkinID((int)targetMem.EquipShowSwitch), ResolveHeroSkinID((int)targetMem.ModelMark, targetMem.Job), 0.8f).Forget(); 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; } }