多轮审查和修复
This commit is contained in:
69
Assets/Scripts/Equipment/Effects/OnHitEffect.cs
Normal file
69
Assets/Scripts/Equipment/Effects/OnHitEffect.cs
Normal file
@@ -0,0 +1,69 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using BaseGames.Combat;
|
||||
using BaseGames.Core.Events;
|
||||
|
||||
namespace BaseGames.Equipment
|
||||
{
|
||||
/// <summary>
|
||||
/// 命中触发效果类型。
|
||||
/// </summary>
|
||||
public enum OnHitEffectType
|
||||
{
|
||||
ApplyPoison,
|
||||
ApplyFire,
|
||||
KnockbackBoost
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 命中触发护符效果(架构 09_ProgressionModule §5)。
|
||||
/// 订阅 HitConfirmedEventChannelSO("EVT_HitConfirmed") 并按概率对命中目标施加状态效果。
|
||||
/// KnockbackBoost 类型通过 DamageInfo.KnockbackForce 标记,由 HurtBox 流水线读取。
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class OnHitEffect : ICharmEffect
|
||||
{
|
||||
public OnHitEffectType effectType;
|
||||
[Range(0f, 1f)]
|
||||
public float chance; // 触发概率(0~1)
|
||||
|
||||
private HitConfirmedEventChannelSO _onHitChannel;
|
||||
private EventSubscription _sub;
|
||||
|
||||
public void OnEquip(EquipmentContext ctx)
|
||||
{
|
||||
_onHitChannel = ctx.Events?.Get<HitConfirmedEventChannelSO>("EVT_HitConfirmed");
|
||||
_sub = _onHitChannel?.Subscribe(HandleHit);
|
||||
}
|
||||
|
||||
public void OnUnequip(EquipmentContext ctx)
|
||||
{
|
||||
_sub?.Dispose();
|
||||
_sub = null;
|
||||
_onHitChannel = null;
|
||||
}
|
||||
|
||||
private void HandleHit(HitInfo info)
|
||||
{
|
||||
if (UnityEngine.Random.value > chance) return;
|
||||
|
||||
switch (effectType)
|
||||
{
|
||||
case OnHitEffectType.ApplyPoison:
|
||||
info.HitTransform?.GetComponentInParent<IStatusEffectable>()
|
||||
?.ApplyStatusEffect(DamageType.Poison);
|
||||
break;
|
||||
case OnHitEffectType.ApplyFire:
|
||||
info.HitTransform?.GetComponentInParent<IStatusEffectable>()
|
||||
?.ApplyStatusEffect(DamageType.Fire);
|
||||
break;
|
||||
case OnHitEffectType.KnockbackBoost:
|
||||
// KnockbackBoost 在 HitBox 构建 DamageInfo 前生效,
|
||||
// 此处为命中后的反馈(可在此播放特效;实际击退已在 HurtBox 流水线处理)。
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public string GetEffectDescription() => $"命中时 {chance * 100:0}% 概率附加 {effectType}";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user