2023-08-22 19:08:45 +08:00
|
|
|
namespace Framework
|
|
|
|
|
{
|
|
|
|
|
// implement a finite state machine class
|
2023-10-19 15:00:19 +08:00
|
|
|
|
2023-08-22 19:08:45 +08:00
|
|
|
public interface IState
|
|
|
|
|
{
|
|
|
|
|
void OnEnter();
|
|
|
|
|
void OnUpdate(float deltaTime);
|
|
|
|
|
void OnExit();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class StateMachine
|
|
|
|
|
{
|
|
|
|
|
private IState _currentState;
|
|
|
|
|
private IState _previousState;
|
|
|
|
|
|
|
|
|
|
public void ChangeState(IState newState)
|
|
|
|
|
{
|
|
|
|
|
if (_currentState != null)
|
|
|
|
|
{
|
|
|
|
|
_currentState.OnExit();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_previousState = _currentState;
|
|
|
|
|
_currentState = newState;
|
|
|
|
|
_currentState?.OnEnter();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Update(float deltaTime)
|
|
|
|
|
{
|
|
|
|
|
if (_currentState != null)
|
|
|
|
|
{
|
|
|
|
|
_currentState.OnUpdate(deltaTime);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void RevertToPreviousState()
|
|
|
|
|
{
|
|
|
|
|
ChangeState(_previousState);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IState GetCurrentState()
|
|
|
|
|
{
|
|
|
|
|
return _currentState;
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-10-19 15:00:19 +08:00
|
|
|
}
|