public void Update()
    {
        StateDefinition.StateName currentTempState = _currentState != null?_currentState.GetStateName() : StateDefinition.StateName.Null;

        if (_desiredState != currentTempState && _desiredState != StateDefinition.StateName.Null)
        {
            BaseState newState = GetState(_desiredState);

            if (newState != null)
            {
                if (_currentState != null)
                {
                    _currentState.OnExit();
                }

                newState.OnEnter();
                _currentState = newState;
            }
        }

        if (_currentState != null)
        {
            _currentState.Update();
        }
    }
    private BaseState GetState(StateDefinition.StateName stateName)
    {
        foreach (BaseState state in _states)
        {
            if (state.GetStateName() == stateName)
            {
                return(state);
            }
        }

        return(null);
    }
 public StateManager()
 {
     _desiredState = StateDefinition.StateName.Null;
 }
 /// <summary>
 /// Switchs the state.
 /// </summary>
 public void SwitchState(StateDefinition.StateName state)
 {
     _stateManager.desiredState = state;
 }