Files
Cielonos/Assets/Scripts/MainGame/Characters/Automata/AI/Actions/StopLoopFuncAnim.cs
SoulliesOfficial f26f9fd374 爆更
2026-03-20 12:07:44 -04:00

64 lines
2.2 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 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;
}
}
}
}