public void Apply(float value) { bool isDown = value > Threshold; if (_isEnabled != isDown) { _isEnabled = isDown; if (Toggles) { if (isDown) { if (ToggleStates.Contains(_control.CurrentShiftState)) { int index = ToggleStates.IndexOf(_control.CurrentShiftState); if (ToggleStates.Count > index + 1) { _control.ChangeState(ToggleStates[index + 1]); } else { _control.ChangeState(ToggleStates[0]); } } else { _control.ChangeState(ToggleStates[0]); } } } else if (isDown) { if (TargetState != _control.CurrentShiftState) { _previousState = _control.CurrentShiftState; } _control.ChangeState(TargetState); } else { _control.ChangeState(_previousState); } } }