64 lines
2.2 KiB
C#
64 lines
2.2 KiB
C#
|
|
using Cielonos.MainGame.Characters;
|
|||
|
|
using Cielonos.MainGame.FunctionalAnimation;
|
|||
|
|
using Opsive.BehaviorDesigner.Runtime.Tasks;
|
|||
|
|
using Opsive.GraphDesigner.Runtime;
|
|||
|
|
using Opsive.GraphDesigner.Runtime.Variables;
|
|||
|
|
using Opsive.Shared.Utility;
|
|||
|
|
using SLSUtilities.FunctionalAnimation;
|
|||
|
|
using UnityEngine;
|
|||
|
|
|
|||
|
|
namespace Cielonos.MainGame.Characters.AI
|
|||
|
|
{
|
|||
|
|
[Description("停止正在播放的功能动画(主要用于停止之前开始的循环功能动画),并在停止后有一帧的缓冲然后返回Success。")]
|
|||
|
|
[NodeIcon("Assets/Sprites/Icon/Pause.png")]
|
|||
|
|
[Category("Cielonos")]
|
|||
|
|
public class StopLoopFuncAnim : AutomataActionBase
|
|||
|
|
{
|
|||
|
|
private AnimationSubcontrollerBase animationSc => self.animationSc;
|
|||
|
|
private FunctionalAnimationSubmodule funcAnimSm;
|
|||
|
|
|
|||
|
|
[Header("Animation Settings")]
|
|||
|
|
[Tooltip("是否选择其他功能动画子模块,默认子模块为全身动作子模块。")]
|
|||
|
|
public bool isOtherFuncAnimSm = false;
|
|||
|
|
[Tooltip("如果选择了其他功能动画子模块,则需要指定子模块名称。")]
|
|||
|
|
public string funcAnimSmName = "";
|
|||
|
|
|
|||
|
|
[Tooltip("要停止动画的打断类型。默认为 ForcedAction 表示强制打断。")]
|
|||
|
|
public DisruptionType disruptionType = DisruptionType.ForcedAction;
|
|||
|
|
|
|||
|
|
private bool frameBuffer;
|
|||
|
|
|
|||
|
|
public override void OnAwake()
|
|||
|
|
{
|
|||
|
|
base.OnAwake();
|
|||
|
|
funcAnimSm = isOtherFuncAnimSm ? null : animationSc.fullBodyFuncAnimSm;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override void OnStart()
|
|||
|
|
{
|
|||
|
|
if (funcAnimSm != null && funcAnimSm.currentRuntimeFuncAnim != null)
|
|||
|
|
{
|
|||
|
|
if (funcAnimSm.currentRuntimeFuncAnim.isLooping)
|
|||
|
|
{
|
|||
|
|
funcAnimSm.Stop(disruptionType);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
frameBuffer = false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override TaskStatus OnUpdate()
|
|||
|
|
{
|
|||
|
|
// 无论刚才是否停止,固定缓冲1帧再返回Success
|
|||
|
|
if (!frameBuffer)
|
|||
|
|
{
|
|||
|
|
frameBuffer = true;
|
|||
|
|
return TaskStatus.Running;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return TaskStatus.Success;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|