using System; using System.Collections; using System.Collections.Generic; using BITKit.Entities; using BITKit.StateMachine; using UnityEngine; namespace BITKit.Entities { public class StateBasedBehavior : EntityBehavior,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 override void Initialize(IEntity entity) { base.Initialize(entity); if (stateMachine is null) { Debug.LogWarning(GetType().Name); } else { stateMachine.Initialize(); } } void IStateMachine.Initialize() { stateMachine.Initialize(); } public void UpdateState(float deltaTime) { stateMachine.UpdateState(deltaTime); } public void DisposeState() { stateMachine.DisposeState(); } public void TransitionState() where State : T { stateMachine.TransitionState(); } public void TransitionState(T state) { stateMachine.TransitionState(state); } } }