/// ---------------------------------------------
/// Ultimate Character Controller
/// Copyright (c) Opsive. All Rights Reserved.
/// https://www.opsive.com
/// ---------------------------------------------
namespace Opsive.UltimateCharacterController.StateSystem
{
using System;
using UnityEngine;
///
/// Acts as the parent object which can use the state system to change property values.
///
public class StateObject : 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; } }
///
/// Initializes the default values.
///
/// The GameObject this object is attached to.
public virtual void Initialize(GameObject gameObject)
{
if (Application.isPlaying) {
StateManager.Initialize(gameObject, this, m_States);
}
}
///
/// Activates or deactivates the specified state.
///
/// The name of the state to change the active 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() { }
}
///
/// Attribute which allows the a state to automatically be added.
///
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false)]
public class AddState : Attribute
{
private string m_Name;
private string m_PresetGUID;
public string Name { get { return m_Name; } }
public string PresetGUID { get { return m_PresetGUID; } }
public AddState(string name, string presetGUID)
{
m_Name = name;
m_PresetGUID = presetGUID;
}
}
}