using System;
|
using Cysharp.Threading.Tasks;
|
using UnityEngine;
|
|
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;
|
|
/// <summary>
|
/// 设置日志数据(Manager 层已预解析 UseData)
|
/// </summary>
|
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();
|
}
|
|
/// <summary>
|
/// 显示玩家信息(头像、称号、名字、战力)
|
/// </summary>
|
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;
|
}
|
}
|
}
|