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);
myAvatarCell.SetActive(true);
myAvatarCell.InitUI(AvatarHelper.GetAvatarModel(playerId, playerInfo.face, playerInfo.facePic));
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);
enemyAvatarCell.SetActive(true);
enemyAvatarCell.InitUI(AvatarHelper.GetAvatarModel(playerId, playerInfo.face, playerInfo.facePic));
enemyAvatarCell.SetListener(() =>
{
AvatarHelper.TryViewOtherPlayerInfo(playerId, playerInfo.serverID, viewPlayerLineupType: (int)BattlePreSetType.GuildAtkDefBat);
});
enemyName.text = playerInfo.name;
enemyfightPointText.text = playerInfo.fightPower;
}
}
}