protected virtual void SwitchState(State newState) { if (_currentState != null && _currentState.GetType() == newState.GetType()) { return; } _currentState?.ExitState(); _currentState = newState; _currentState.InitState(); _updateState = _currentState.UpdateState; }