Files
zeling_v2/Assets/Scripts/Combat/DamageSourceSO.cs
2026-05-08 11:04:00 +08:00

53 lines
1.9 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 UnityEngine;
namespace BaseGames.Combat
{
/// <summary>
/// 攻击数据源 SO。描述单次攻击的基础伤害参数。
/// ⚡ 热路径使用零分配工厂DamageInfo.From(sourceSO)。
/// 仅需链式覆盖多字段时才使用 CreateBuilder()。
/// </summary>
[CreateAssetMenu(menuName = "Combat/DamageSource")]
public class DamageSourceSO : ScriptableObject
{
[Header("Identity")]
public string sourceId;
public string skillId;
[Header("Base")]
public int BaseDamage = 10;
public float DamageMultiplier = 1.0f;
public DamageType Type = DamageType.Normal;
public DamageCategory Category = DamageCategory.NormalAttack;
public DamageFlags Flags = DamageFlags.CanBeParried;
public DamageTags Tags = DamageTags.MeleeHit;
[Header("Physics")]
public float KnockbackForce = 5f;
public float HitStunDuration = 0.1f;
public BreakLevel BreakLevel = BreakLevel.Light;
[Header("FX")]
public HitFxType FxType = HitFxType.Slash;
[Header("Combo")]
public float ComboWindowDuration = 0.4f;
public float CancelWindowEnd = 0.5f;
/// <summary>
/// 链式 Builder特殊场景使用热路径改用 DamageInfo.From(this))。
/// </summary>
public DamageInfo.Builder CreateBuilder() => new DamageInfo.Builder()
.SetRaw(Mathf.RoundToInt(BaseDamage * DamageMultiplier))
.SetType(Type)
.SetCategory(Category)
.SetFlags(Flags)
.SetTags(Tags)
.SetStun(HitStunDuration)
.SetFx(FxType)
.SetBreak(BreakLevel)
.SetSourceId(sourceId)
.SetSkillId(skillId);
}
}