Files
Cielonos/Assets/Scripts/MainGame/Base/FunctionalAnimation/Payloads/RemoveBuff.cs
SoulliesOfficial 9a9e48f8a5
2026-06-27 12:52:03 -04:00

53 lines
2.0 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 System;
using Cielonos.MainGame.Buffs.Character;
using Cielonos.MainGame.Characters;
using Sirenix.OdinInspector;
using SLSUtilities.FunctionalAnimation;
using UnityEngine;
namespace Cielonos.MainGame.Base.FunctionalAnimation.Payloads
{
/// <summary>
/// FuncAnim Payload在动画事件触发时检测当前的动画执行者身上是否存在指定类型的 Buff如果存在则将其移除。
/// 完全兼容 ICharacterBuffFactory 的 Odin 多态编辑架构(但仅将其作为类型选择器)。
/// </summary>
[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。");
}
}
}
}