Files
zeling_v2/Assets/Scripts/Feedback/IFeedbackPlayer.cs
2026-05-12 15:34:08 +08:00

73 lines
3.7 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.
namespace BaseGames.Feedback
{
/// <summary>
/// 反馈播放器接口:封装所有角色反馈行为,解耦 Character 逻辑与 Feel/MMF_Player 的直接依赖。
/// 由 PlayerFeedback玩家和 EnemyFeedback敌人分别实现
/// NullFeedbackPlayer 用于测试/占位。
/// </summary>
public interface IFeedbackPlayer
{
// ── 命中 ──────────────────────────────────────────────────────────────────
/// <summary>对目标造成命中时播放对应力度的反馈(摄像机震屏 + 控制器振动等)。</summary>
void PlayHit(HitWeight weight);
/// <summary>成功弹反Parry时播放反馈。</summary>
void PlayParrySuccess();
// ── 受伤 / 死亡 ──────────────────────────────────────────────────────────
/// <summary>角色受到伤害时播放反馈(闪白 + 轻微震屏等)。</summary>
void PlayTakeHit();
/// <summary>角色死亡时播放反馈(慢动作 + 震屏 + 音效)。</summary>
void PlayDeath();
// ── 状态恢复 ─────────────────────────────────────────────────────────────
/// <summary>治疗/恢复血量时播放反馈(粒子 + 音效)。</summary>
void PlayHeal();
// ── 移动 / 动作 ──────────────────────────────────────────────────────────
/// <summary>硬着陆时播放地面冲击反馈。</summary>
void PlayLandImpact();
/// <summary>攻击出手时播放破风反馈。</summary>
void PlayAttackWhoosh();
/// <summary>跳跃起跳时播放反馈。</summary>
void PlayJumpLaunch();
/// <summary>脚步音效反馈(行走帧动画事件触发)。</summary>
void PlayFootstep();
// ── 通用 ─────────────────────────────────────────────────────────────────
/// <summary>通过 presetId 触发在 Inspector 中配置的命名预设 MMF_Player。</summary>
void TriggerPreset(string presetId);
/// <summary>通过 sfxId 触发单次音效(不带任何摄像机/振动反馈)。</summary>
void PlaySFXById(string sfxId);
}
/// <summary>命中力度。</summary>
public enum HitWeight { Light, Medium, Heavy }
/// <summary>
/// 空对象模式实现:所有方法均为空操作,用于测试和不需要反馈的实体。
/// </summary>
public class NullFeedbackPlayer : IFeedbackPlayer
{
public static readonly NullFeedbackPlayer Instance = new NullFeedbackPlayer();
public void PlayHit(HitWeight weight) { }
public void PlayParrySuccess() { }
public void PlayTakeHit() { }
public void PlayDeath() { }
public void PlayHeal() { }
public void PlayLandImpact() { }
public void PlayAttackWhoosh() { }
public void PlayJumpLaunch() { }
public void PlayFootstep() { }
public void TriggerPreset(string presetId) { }
public void PlaySFXById(string sfxId) { }
}
}