using System; using System.Collections.Generic; using BITKit.StateMachine; using UnityEngine; namespace BITKit.Entities.Player { /// /// 基于状态机的玩家组件 /// /// 状态,继承于 public abstract class StateBasedPlayerBehavior : EntityPlayerBehavior,IStateMachine where T : IState { [SerializeField] private MonoStateMachine stateMachine; public override void OnAwake() { stateMachine?.Initialize(); base.OnAwake(); } 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; 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); } } }