BITFALL/Assets/BITKit/Unity/Scripts/Entity/Player/StateBasedPlayerComponent.cs

66 lines
1.4 KiB
C#
Raw Normal View History

2023-08-23 01:59:40 +08:00
using System;
using System.Collections.Generic;
using BITKit.StateMachine;
using UnityEngine;
2023-08-27 02:58:19 +08:00
namespace BITKit.Entities.Player
2023-08-23 01:59:40 +08:00
{
/// <summary>
/// 基于状态机的玩家组件
/// </summary>
/// <typeparam name="T">状态,继承于<see cref="IState"/></typeparam>
public abstract class StateBasedPlayerComponent<T> : EntityPlayerComponent,IStateMachine<T> where T : IState
{
[SerializeField] private MonoStateMachine<T> stateMachine;
public override void Initialize(IEntity _entity)
{
base.Initialize(_entity);
stateMachine?.Initialize();
}
public bool Enabled
{
get => stateMachine.Enabled;
set => stateMachine.Enabled = value;
}
public T CurrentState
{
get => stateMachine.CurrentState;
set => stateMachine.CurrentState = value;
}
public event Action<T, T> OnStateChanged
{
add => stateMachine.OnStateChanged += value;
remove => stateMachine.OnStateChanged -= value;
}
public IDictionary<Type, T> StateDictionary => stateMachine.StateDictionary;
void IStateMachine<T>.Initialize()
{
stateMachine.Initialize();
}
2023-08-27 02:58:19 +08:00
public void UpdateState(float deltaTime)
2023-08-23 01:59:40 +08:00
{
2023-08-27 02:58:19 +08:00
stateMachine.UpdateState(deltaTime);
2023-08-23 01:59:40 +08:00
}
public void DisposeState()
{
stateMachine.DisposeState();
}
public void TransitionState<State>() where State : T
{
stateMachine.TransitionState<State>();
}
public void TransitionState(T state)
{
stateMachine.TransitionState(state);
}
}
}