You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.8 KiB
C#
74 lines
2.8 KiB
C#
// Animancer // Copyright 2020 Kybernetik //
|
|
|
|
using UnityEngine;
|
|
|
|
namespace Animancer.FSM
|
|
{
|
|
/// <summary>
|
|
/// Base class for <see cref="MonoBehaviour"/> states to be used in a <see cref="StateMachine{TState}"/>.
|
|
/// </summary>
|
|
[HelpURL(StateExtensions.APIDocumentationURL + "StateBehaviour_1")]
|
|
public abstract class StateBehaviour<TState> : MonoBehaviour, IState<TState>
|
|
where TState : StateBehaviour<TState>
|
|
{
|
|
/************************************************************************************************************************/
|
|
|
|
/// <summary>
|
|
/// Determines whether the <see cref="StateMachine{TState}"/> can enter this state. Always returns true
|
|
/// unless overridden.
|
|
/// </summary>
|
|
public virtual bool CanEnterState(TState previousState) { return true; }
|
|
|
|
/// <summary>
|
|
/// Determines whether the <see cref="StateMachine{TState}"/> can exit this state. Always returns true
|
|
/// unless overridden.
|
|
/// </summary>
|
|
public virtual bool CanExitState(TState nextState) { return true; }
|
|
|
|
/************************************************************************************************************************/
|
|
|
|
/// <summary>
|
|
/// Asserts that this component is not already enabled, then enable it.
|
|
/// </summary>
|
|
public virtual void OnEnterState()
|
|
{
|
|
Debug.Assert(!enabled, this + " was already enabled when entering its state", this);
|
|
enabled = true;
|
|
}
|
|
|
|
/************************************************************************************************************************/
|
|
|
|
/// <summary>
|
|
/// Asserts that this component is not already disabled, then disable it.
|
|
/// </summary>
|
|
public virtual void OnExitState()
|
|
{
|
|
if (this == null)
|
|
return;
|
|
|
|
Debug.Assert(enabled, this + " was already disabled when exiting its state", this);
|
|
enabled = false;
|
|
}
|
|
|
|
/************************************************************************************************************************/
|
|
|
|
#if UNITY_EDITOR
|
|
/// <summary>[Editor-Only]
|
|
/// Called by the Unity Editor in Edit Mode whenever an instance of this script is loaded or a value is changed
|
|
/// in the Inspector.
|
|
/// <para></para>
|
|
/// States start disabled and only the current state gets enabled at runtime.
|
|
/// </summary>
|
|
protected virtual void OnValidate()
|
|
{
|
|
if (UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode)
|
|
return;
|
|
|
|
enabled = false;
|
|
}
|
|
#endif
|
|
|
|
/************************************************************************************************************************/
|
|
}
|
|
}
|