NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Framework/Pattern/StatePattern.cs

54 lines
1.4 KiB
C#

using Cysharp.Threading.Tasks;
namespace Framework
{
// implement a finite state machine class
public interface IState
{
bool exitFinished { get; }
void OnEnter();
void OnUpdate(float deltaTime);
void OnExit();
}
public class StateMachine
{
private IState _currentState;
private IState _previousState;
public async UniTask ChangeState(IState newState)
{
if (_currentState != null)
{
_currentState.OnExit();
while (!_currentState.exitFinished)
{
UniTask.NextFrame();
}
}
_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;
}
}
}