using System; using System.Collections; using System.Collections.Generic; using BITKit.StateMachine; using UnityEngine; namespace BITKit { public abstract class StateBasedMonoBehaviour : MonoBehaviour, IStateMachine where T : IState { [SerializeField] private MonoStateMachine stateMachine; public bool Enabled { get => stateMachine.Enabled; set => stateMachine.Enabled = value; } public T CurrentState { get => stateMachine.CurrentState; set => stateMachine.CurrentState = value; } public event Action OnStateChanged { add => stateMachine.OnStateChanged += value; remove => stateMachine.OnStateChanged -= value; } public IDictionary StateDictionary => stateMachine.StateDictionary; public virtual void Initialize() { stateMachine.Initialize(); } public virtual void UpdateState() { stateMachine.UpdateState(); } public virtual void DisposeState() { stateMachine.DisposeState(); } public virtual void TransitionState() where State : T { stateMachine.TransitionState(); } public virtual void TransitionState(T state) { stateMachine.TransitionState(state); } } }