using System; using System.Collections.Generic; using Cielonos.MainGame.Buffs.Character; using Opsive.BehaviorDesigner.Runtime.Tasks; using Opsive.GraphDesigner.Runtime; using Opsive.GraphDesigner.Runtime.Variables; using Opsive.Shared.Utility; using UnityEngine; namespace Cielonos.MainGame.Characters.AI { [Description("向指定目标(或自身)施加一个 Buff。使用 [SerializeReference] 多态配置,在检查器中下拉选择 Buff 类型,并直接编辑其参数。")] [NodeIcon("Assets/Sprites/Icon/Play.png")] [Category("Cielonos/Buffs")] public class ApplyBuff : AutomataActionBase { [Tooltip("施加 Buff 的目标对象列表。如果留空,则默认施加给 AI 自身。")] public List> targetList; [Tooltip("选择要施加的 Buff 类型并配置其参数。")] [SerializeReference] public ICharacterBuffFactory buffFactory; public override TaskStatus OnUpdate() { if (buffFactory == null) { Debug.LogWarning("[ApplyBuff] 未配置 Buff 工厂,请在检查器中选择一个 Buff 类型。"); return TaskStatus.Failure; } if (targetList != null && targetList.Count > 0) { foreach (var sharedTarget in targetList) { if (sharedTarget == null || sharedTarget.Value == null) continue; var character = sharedTarget.Value.GetComponent(); if (character != null) { buffFactory.Create().Apply(character, self); } else { Debug.LogWarning($"[ApplyBuff] 目标 {sharedTarget.Value.name} 上未找到 CharacterBase 组件,已跳过。"); } } } else { // 留空则默认施加给自身 buffFactory.Create().Apply(self, self); } return TaskStatus.Success; } public override void Reset() { base.Reset(); targetList = null; buffFactory = null; } } }