using Opsive.BehaviorDesigner.Runtime.Tasks; using Opsive.GraphDesigner.Runtime; using Opsive.Shared.Utility; using SLSUtilities.FunctionalAnimation; using UnityEngine; namespace Cielonos.MainGame.Characters.AI { [Description("让角色播放一个功能动画,播放过程中会检测打断情况。")] [NodeIcon("Assets/Sprites/Icon/Play.png")] [Category("Cielonos")] public class IsPlayingFuncAnim : AutomataConditionalBase { private AnimationSubcontrollerBase animationSc => self.animationSc; private FunctionalAnimationSubmodule funcAnimSm; private RuntimeFuncAnim funcAnim; [Tooltip("是否选择其他功能动画子模块,默认子模块为全身动作子模块。")] public bool isOtherFuncAnimSm = false; [Tooltip("如果选择了其他功能动画子模块,则需要指定子模块名称。")] public string funcAnimSmName = ""; [Tooltip("检测是否正在播放任何功能动画(True),或者指定功能动画名称的动画(False)。")] public bool checkIsPlayingAny; [Tooltip("如果检测指定动画,填写功能动画名称。")] public string animationName; public override void OnAwake() { base.OnAwake(); funcAnimSm = isOtherFuncAnimSm ? null : animationSc.fullBodyFuncAnimSm; } public override TaskStatus OnUpdate() { if (funcAnimSm?.currentRuntimeFuncAnim != null) { if (checkIsPlayingAny || funcAnimSm.currentRuntimeFuncAnim.animationName == animationName) { return TaskStatus.Success; } } return TaskStatus.Failure; } } }