/// --------------------------------------------- /// Ultimate Character Controller /// Copyright (c) Opsive. All Rights Reserved. /// https://www.opsive.com /// --------------------------------------------- namespace Opsive.UltimateCharacterController.StateSystem { using UnityEngine; /// /// Acts as the parent component which can use the state system to change property values. /// public class StateBehavior : MonoBehaviour, IStateOwner { [Tooltip("A list of all states that the component can change to.")] [HideInInspector] [SerializeField] protected State[] m_States = new State[] { new State("Default", true) }; [Opsive.Shared.Utility.NonSerialized] public State[] States { get { return m_States; } set { m_States = value; } } /// /// Initialize the default values. /// protected virtual void Awake() { if (Application.isPlaying) { StateManager.Initialize(gameObject, this, m_States); } } /// /// Activates or deactivates the specified state. /// /// The name of the state to change the activate status of. /// Should the state be activated? public void SetState(string stateName, bool active) { StateManager.SetState(this, m_States, stateName, active); } /// /// Callback when the StateManager will change the active state on the current object. /// public virtual void StateWillChange() { } /// /// Callback when the StateManager has changed the active state on the current object. /// public virtual void StateChange() { } } }