using System; using Cielonos.MainGame.Buffs.Character; using Cielonos.MainGame.Characters; using Sirenix.OdinInspector; using SLSUtilities.FunctionalAnimation; using UnityEngine; namespace Cielonos.MainGame.Base.FunctionalAnimation.Payloads { /// /// FuncAnim Payload:在动画事件触发时,检测当前的动画执行者身上是否存在指定类型的 Buff,如果存在则将其移除。 /// 完全兼容 ICharacterBuffFactory 的 Odin 多态编辑架构(但仅将其作为类型选择器)。 /// [Serializable] [EventColor(0.9f, 0.3f, 0.3f)] public class RemoveBuff : FuncAnimPayloadBase { public override string NameForInspector => "Remove Buff"; [Tooltip("选择要移除的 Buff 类型(你在下拉菜单里填写的持续时间等参数会被忽略,这里仅作类型匹配依据)。")] [SerializeReference] public ICharacterBuffFactory buffFactory; public override void Invoke() { if (buffFactory == null) { Debug.LogWarning("[RemoveBuffPayload] 未配置 Buff 工厂,无法移除 Buff。"); return; } if (Executor is CharacterBase characterBase) { // 通过 Factory 生成一个临时的 DummyBuff 仅用于获取我们需要匹配的具体子类 Type CharacterBuffBase dummyBuff = buffFactory.Create(); Type targetBuffType = dummyBuff.GetType(); // 在角色当前的 Buff 列表中寻找到同类型实例 CharacterBuffBase existingBuff = characterBase.buffSm.buffList.Find(x => x.GetType() == targetBuffType); if (existingBuff != null) { existingBuff.Remove(); } } else { Debug.LogWarning("[RemoveBuffPayload] 动画执行者不是 CharacterBase,无法移除 CharacterBuff。"); } } } }