48 lines
1.7 KiB
C#
48 lines
1.7 KiB
C#
namespace BaseGames.Combat.StatusEffects
|
||
{
|
||
/// <summary>
|
||
/// 燃烧效果(架构 06_CombatModule §11)。
|
||
/// 规则:不可叠加(MaxStacks = 1);重复施加刷新持续时间;每 0.5 秒造成 1 点 True 伤害。
|
||
/// </summary>
|
||
public class FireEffect : StatusEffect
|
||
{
|
||
private const float BaseDuration = 3.0f; // 持续 3 秒
|
||
private const float DotInterval = 0.5f; // 每 0.5 秒一次
|
||
|
||
public override StatusEffectType EffectType => StatusEffectType.Fire;
|
||
public override int MaxStacks => 1;
|
||
/// <summary>施加燃烧时移除冻结(火冰互斥)。</summary>
|
||
public override StatusEffectType[] MutualExclusions => new[] { StatusEffectType.Freeze };
|
||
|
||
public FireEffect()
|
||
{
|
||
TickInterval = DotInterval;
|
||
}
|
||
|
||
public override void OnApply(StatusEffectManager owner)
|
||
{
|
||
base.OnApply(owner);
|
||
owner.SetShaderParam("_FireGlow", 1f);
|
||
}
|
||
|
||
/// <summary>每次 DoT Tick 造成 1 点 True 伤害(绕过护盾,无敌帧不免疫)。</summary>
|
||
public override void OnTick()
|
||
{
|
||
var info = new DamageInfo.Builder()
|
||
.SetRaw(1)
|
||
.SetType(DamageType.True)
|
||
.SetFlags(DamageFlags.IgnoreIFrame)
|
||
.Build();
|
||
Owner?.ApplyDirectDamage(info);
|
||
}
|
||
|
||
public override void OnExpire()
|
||
{
|
||
Owner?.SetShaderParam("_FireGlow", 0f);
|
||
}
|
||
|
||
protected override float GetBaseDuration() => BaseDuration;
|
||
public override string GetDisplayName() => "燃烧";
|
||
}
|
||
}
|