using System; using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.UI; public class GuildAtkDefBatRecordCell : CellView { [SerializeField] ImageEx titleImage; [SerializeField] TextEx dataText; [SerializeField] TextEx resultText; [SerializeField] TextEx difficultyText; [SerializeField] TextEx stateText; [SerializeField] TextEx myName; [SerializeField] ImageEx myResultImage; [SerializeField] AvatarCell myAvatarCell; [SerializeField] OfficialTitleCell myOfficialTitle; [SerializeField] TextEx myfightPointText; [SerializeField] RectTransform myAddStarRect; [SerializeField] TextEx myAddStaText; [SerializeField] TextEx enemyName; [SerializeField] ImageEx enemyResultImage; [SerializeField] AvatarCell enemyAvatarCell; [SerializeField] OfficialTitleCell enemyOfficialTitle; [SerializeField] TextEx enemyfightPointText; [SerializeField] RectTransform enemyAddStarRect; [SerializeField] TextEx enemyAddStarText; /// /// 设置日志数据(Manager 层已预解析 UseData) /// public void SetLogData(GuildAtkDefBatManager.GuildAtkDefBatLogEntry logEntry) { if (logEntry == null || logEntry.action == null) return; var action = logEntry.action; uint myFamilyID = (uint)GuildAtkDefBatManager.Instance.MyFamilyID; bool isMyAttackLog = logEntry.familyID == myFamilyID; // 1. dataText — 时间显示 "MM-dd HH:mm:ss" DateTime dt = TimeUtility.GetTime(action.Time); dataText.text = dt.ToString("MM-dd HH:mm:ss"); // 2. 判断胜负 bool attackerWon = action.Value4 == 1; bool isMySideWon = isMyAttackLog ? attackerWon : !attackerWon; resultText.text = Language.Get(isMySideWon ? "GuildAtkDefBat01" : "GuildAtkDefBat02"); // 3. difficultyText — 实力百分比 GuildAtkDefBat03 {0}%实力,扫荡类型不显示 bool isSweepType = action.Value1 == 0; difficultyText.SetActive(!isSweepType); if (!isSweepType) difficultyText.text = Language.Get("GuildAtkDefBat03", action.Value5); // 4. stateText — 战斗类型 挑战/扫荡/防守 bool isDefense = !isMyAttackLog; string stateKey; if (isDefense) { stateKey = "GuildAtkDefBat06"; // 防守 titleImage.SetSprite("GuildAtkDefBatRecordTitleDef"); } else if (action.Value1 == 1) { stateKey = "GuildAtkDefBat04"; // 挑战 titleImage.SetSprite("GuildAtkDefBatRecordTitleAtk"); } else { stateKey = "GuildAtkDefBat05"; // 扫荡 titleImage.SetSprite("GuildAtkDefBatRecordTitleSweep"); } stateText.text = Language.Get(stateKey); // 5. 使用 Manager 预解析的玩家信息 var myInfo = isMyAttackLog ? logEntry.atkPlayerInfo : logEntry.defPlayerInfo; var enemyInfo = isMyAttackLog ? logEntry.defPlayerInfo : logEntry.atkPlayerInfo; DisplayPlayerInfo(true, myInfo, action, isMyAttackLog); DisplayPlayerInfo(false, enemyInfo, action, isMyAttackLog); // 6. 胜负图标 myResultImage.SetSprite(isMySideWon ? "GuildAtkDefBatRecordVictory" : "GuildAtkDefBatRecordFail"); enemyResultImage.SetSprite(isMySideWon ? "GuildAtkDefBatRecordFail" : "GuildAtkDefBatRecordVictory"); // 7. 星星显隐(扫荡不显示星数,挑战/防守显示在胜方,星数<=0不显示) bool hasStar = !isSweepType && action.Value6 > 0; myAddStarRect.SetActive(hasStar && isMySideWon); enemyAddStarRect.SetActive(hasStar && !isMySideWon); if (hasStar && isMySideWon && myInfo != null) myAddStaText.text = action.Value6.ToString(); if (hasStar && !isMySideWon && enemyInfo != null) enemyAddStarText.text = action.Value6.ToString(); } /// /// 显示玩家信息(头像、称号、名字、战力) /// void DisplayPlayerInfo(bool isMySide, GuildAtkDefBatManager.GuildAtkDefBatPlayerInfo playerInfo, HA513_tagMCFamilyActionInfo.tagMCFamilyAction action, bool isMyAttackLog) { if (playerInfo == null) { if (isMySide) { myOfficialTitle.SetActive(false); myAvatarCell.SetActive(false); myName.text = string.Empty; myfightPointText.text = string.Empty; } else { enemyOfficialTitle.SetActive(false); enemyAvatarCell.SetActive(false); enemyName.text = string.Empty; enemyfightPointText.text = string.Empty; } return; } // 动态计算玩家ID: // - 当 isMySide == isMyAttackLog 时,当前方是攻击方 -> 使用 Value2(攻击方ID) // - 当 isMySide != isMyAttackLog 时,当前方是防守方 -> 使用 Value3(防守方ID) bool useValue2 = (isMySide == isMyAttackLog); int playerId = (int)(useValue2 ? action.Value2 : action.Value3); if (isMySide) { myOfficialTitle.SetActive(true); myOfficialTitle.InitUI(playerInfo.fmLV, playerInfo.titleID).Forget(); myAvatarCell.SetActive(true); myAvatarCell.InitUI(AvatarHelper.GetAvatarModel(playerId, playerInfo.face, playerInfo.facePic)).Forget(); myAvatarCell.SetListener(() => { AvatarHelper.TryViewOtherPlayerInfo(playerId, playerInfo.serverID, viewPlayerLineupType: (int)BattlePreSetType.GuildAtkDefBat); }); myName.text = playerInfo.name; myfightPointText.text = playerInfo.fightPower; } else { enemyOfficialTitle.SetActive(true); enemyOfficialTitle.InitUI(playerInfo.fmLV, playerInfo.titleID).Forget(); enemyAvatarCell.SetActive(true); enemyAvatarCell.InitUI(AvatarHelper.GetAvatarModel(playerId, playerInfo.face, playerInfo.facePic)).Forget(); enemyAvatarCell.SetListener(() => { AvatarHelper.TryViewOtherPlayerInfo(playerId, playerInfo.serverID, viewPlayerLineupType: (int)BattlePreSetType.GuildAtkDefBat); }); enemyName.text = playerInfo.name; enemyfightPointText.text = playerInfo.fightPower; } } }