diff --git a/radiant/camera/CamWnd.cpp b/radiant/camera/CamWnd.cpp index 0771c2822d..db0b626419 100644 --- a/radiant/camera/CamWnd.cpp +++ b/radiant/camera/CamWnd.cpp @@ -1129,76 +1129,46 @@ void CamWnd::handleFreeMoveKeyEvent(KeyEventType eventType, unsigned int movemen } } -void CamWnd::onForwardKey(KeyEventType eventType) +void CamWnd::handleKeyEvent(KeyEventType eventType, unsigned int freeMoveFlags, const std::function& discreteMovement) { if (freeMoveEnabled()) { - handleFreeMoveKeyEvent(eventType, MOVE_FORWARD); + handleFreeMoveKeyEvent(eventType, freeMoveFlags); } else if (eventType == KeyEventType::KeyPressed) { - _camera.moveForwardDiscrete(SPEED_MOVE); + discreteMovement(); } } +void CamWnd::onForwardKey(KeyEventType eventType) +{ + handleKeyEvent(eventType, MOVE_FORWARD, [this]() { _camera.moveForwardDiscrete(SPEED_MOVE); }); +} + void CamWnd::onBackwardKey(KeyEventType eventType) { - if (freeMoveEnabled()) - { - handleFreeMoveKeyEvent(eventType, MOVE_BACK); - } - else if (eventType == KeyEventType::KeyPressed) - { - _camera.moveBackDiscrete(SPEED_MOVE); - } + handleKeyEvent(eventType, MOVE_BACK, [this]() { _camera.moveBackDiscrete(SPEED_MOVE); }); } void CamWnd::onLeftKey(KeyEventType eventType) { - if (freeMoveEnabled()) - { - handleFreeMoveKeyEvent(eventType, MOVE_STRAFELEFT); - } - else if (eventType == KeyEventType::KeyPressed) - { - _camera.rotateLeftDiscrete(); - } + handleKeyEvent(eventType, MOVE_STRAFELEFT, [this]() { _camera.rotateLeftDiscrete(); }); } void CamWnd::onRightKey(KeyEventType eventType) { - if (freeMoveEnabled()) - { - handleFreeMoveKeyEvent(eventType, MOVE_STRAFERIGHT); - } - else if (eventType == KeyEventType::KeyPressed) - { - _camera.rotateRightDiscrete(); - } + handleKeyEvent(eventType, MOVE_STRAFERIGHT, [this]() { _camera.rotateRightDiscrete(); }); } void CamWnd::onUpKey(KeyEventType eventType) { - if (freeMoveEnabled()) - { - handleFreeMoveKeyEvent(eventType, MOVE_UP); - } - else if (eventType == KeyEventType::KeyPressed) - { - _camera.moveUpDiscrete(SPEED_MOVE); - } + handleKeyEvent(eventType, MOVE_UP, [this]() { _camera.moveUpDiscrete(SPEED_MOVE); }); } void CamWnd::onDownKey(KeyEventType eventType) { - if (freeMoveEnabled()) - { - handleFreeMoveKeyEvent(eventType, MOVE_DOWN); - } - else if (eventType == KeyEventType::KeyPressed) - { - _camera.moveDownDiscrete(SPEED_MOVE); - } + handleKeyEvent(eventType, MOVE_DOWN, [this]() { _camera.moveDownDiscrete(SPEED_MOVE); }); } // ------------------------------------------------------------------------------- diff --git a/radiant/camera/CamWnd.h b/radiant/camera/CamWnd.h index 03371f263b..2a966c2eae 100644 --- a/radiant/camera/CamWnd.h +++ b/radiant/camera/CamWnd.h @@ -150,6 +150,7 @@ class CamWnd : protected: void handleFreeMoveKeyEvent(KeyEventType eventType, unsigned int movementFlags); + void handleKeyEvent(KeyEventType eventType, unsigned int freeMoveFlags, const std::function& discreteMovement); // Required overrides being a MouseToolHandler virtual MouseTool::Result processMouseDownEvent(const MouseToolPtr& tool, const Vector2& point) override;