Files
ft/Client/Assets/Scripts/Event1v1Battle/Data/Event1v1BattleSlapPresentationData.cs
2026-06-29 21:18:33 +08:00

171 lines
5.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
namespace Event1v1Battle.Data
{
/// <summary>
/// 1v1扇耳光大赛活动表现数据
/// 用于TV动画展示与真实数据分离
/// </summary>
[Serializable]
public class Event1v1BattleSlapPresentationData
{
/// <summary>
/// 倍率
/// </summary>
public int Multiplier;
/// <summary>
/// 当前关卡ID表现用
/// </summary>
public int CurrentStageID;
/// <summary>
/// NPC名称表现用
/// </summary>
public string NpcName;
/// <summary>
/// NPC头像表现用
/// </summary>
public string NpcIcon;
/// <summary>
/// NPC当前HP表现用
/// </summary>
public int NpcHp;
/// <summary>
/// 玩家出手后、NPC 反击与续命 <see cref="Event1v1BattleSlapManager.InitializeStageHp"/> 重置前的敌人 HP。
/// TV 玩家段扣血动画用;&lt; 0 表示未设置,回退 <see cref="Event1v1BattleSlapData.NpcHp"/>。
/// </summary>
public int NpcHpAfterPlayerAttack = -1;
/// <summary>
/// 最大HP表现用
/// </summary>
public int MaxHp;
/// <summary>
/// 玩家HP表现用
/// </summary>
public int PlayerHp;
/// <summary>
/// 玩家最大HP表现用
/// </summary>
public int PlayerMaxHp;
/// <summary>
/// 是否击杀了NPC
/// </summary>
public bool KilledNpc;
/// <summary>
/// 是否触发了进入下一关
/// </summary>
public bool StageCompleted;
/// <summary>
/// 下一关IDStageCompleted为true时有效
/// </summary>
public int NextStageId;
/// <summary>
/// 是否正在进行表现
/// </summary>
public bool IsPlayAttacking = false;
/// <summary>
/// 是否触发了npc攻击
/// </summary>
public bool IsNpcAttacking = false;
/// <summary>
/// 是否击杀了玩家
/// </summary>
public bool KilledPlayer = false;
/// <summary>
/// NPC攻击伤害表现用
/// 用于TV动画显示HP变化
/// </summary>
public int AttackDamage = 0;
public int CanQuality;
/// <summary>
/// NPC 本次攻击对应的罐头品质(与玩家攻击同源规则),用于 TV 轻/重击 Timeline。
/// </summary>
public int NpcAttackCanQuality;
public bool IsNpcBuffValid;
/// <summary>
/// 是否因超时30分钟倒计时结束判定玩家战败
/// </summary>
public bool IsTimeoutDefeat;
/// <summary>
/// 是否触发双方战败(预留)
/// </summary>
public bool IsBothDefeated;
/// <summary>
/// TV 战败关界面后主界面扣心 FX 用:扣心前的命数(存档已是扣后值)。<see cref="Clear"/> 不会清空此项,避免 ClosePanel 清表现后读不到。
/// </summary>
public int PendingMainPanelHeartVisualBefore;
public bool IsPresenting => IsNpcAttacking || IsPlayAttacking || IsTimeoutDefeat || IsBothDefeated;
public void SetPendingMainPanelHeartLossVisual(int lifeCountBeforeLoss)
{
if (lifeCountBeforeLoss > 0)
PendingMainPanelHeartVisualBefore = lifeCountBeforeLoss;
}
public void ClearPendingMainPanelHeartLossVisual()
{
PendingMainPanelHeartVisualBefore = 0;
}
/// <summary>
/// 清理数据(不含 <see cref="PendingMainPanelHeartVisualBefore"/>,供主面板在 TV 关闭后消费)
/// </summary>
public void Clear()
{
KilledNpc = false;
StageCompleted = false;
NextStageId = 0;
IsPlayAttacking = false;
IsNpcAttacking = false;
KilledPlayer = false;
AttackDamage = 0;
CurrentStageID = 0;
NpcName = string.Empty;
NpcIcon = string.Empty;
NpcHp = 0;
NpcHpAfterPlayerAttack = -1;
MaxHp = 0;
PlayerHp = 0;
PlayerMaxHp = 0;
CanQuality = 0;
NpcAttackCanQuality = 0;
IsTimeoutDefeat = false;
IsBothDefeated = false;
IsNpcBuffValid = false;
}
/// <summary>
/// 从真实数据同步基本信息
/// </summary>
public void SyncFromRealData(Event1v1BattleSlapData realData)
{
CurrentStageID = realData.CurrentStageID;
NpcName = realData.NpcName;
NpcIcon = realData.NpcIcon;
NpcHp = realData.NpcHp;
MaxHp = realData.MaxHp;
PlayerHp = realData.PlayerHp;
PlayerMaxHp = realData.MaxHp;
}
}
}