Skip to content

Commit

Permalink
#5338: Move UI keypress handling towards CamWnd.
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Sep 26, 2020
1 parent d9b3ccf commit ce728f9
Show file tree
Hide file tree
Showing 5 changed files with 99 additions and 127 deletions.
84 changes: 84 additions & 0 deletions radiant/camera/CamWnd.cpp
Expand Up @@ -1117,6 +1117,90 @@ void CamWnd::drawTime()
GlobalOpenGL().drawString(fmt::format("Time: {0:.3f} sec.", (time * 0.001f)));
}

void CamWnd::handleFreeMoveKeyEvent(KeyEventType eventType, unsigned int movementFlags)
{
if (eventType == KeyEventType::KeyPressed)
{
_camera.setMovementFlags(movementFlags);
}
else
{
_camera.clearMovementFlags(movementFlags);
}
}

void CamWnd::onForwardKey(KeyEventType eventType)
{
if (freeMoveEnabled())
{
handleFreeMoveKeyEvent(eventType, MOVE_FORWARD);
}
else if (eventType == KeyEventType::KeyPressed)
{
_camera.moveForwardDiscrete(SPEED_MOVE);
}
}

void CamWnd::onBackwardKey(KeyEventType eventType)
{
if (freeMoveEnabled())
{
handleFreeMoveKeyEvent(eventType, MOVE_BACK);
}
else if (eventType == KeyEventType::KeyPressed)
{
_camera.moveBackDiscrete(SPEED_MOVE);
}
}

void CamWnd::onLeftKey(KeyEventType eventType)
{
if (freeMoveEnabled())
{
handleFreeMoveKeyEvent(eventType, MOVE_STRAFELEFT);
}
else if (eventType == KeyEventType::KeyPressed)
{
_camera.rotateLeftDiscrete();
}
}

void CamWnd::onRightKey(KeyEventType eventType)
{
if (freeMoveEnabled())
{
handleFreeMoveKeyEvent(eventType, MOVE_STRAFERIGHT);
}
else if (eventType == KeyEventType::KeyPressed)
{
_camera.rotateRightDiscrete();
}
}

void CamWnd::onUpKey(KeyEventType eventType)
{
if (freeMoveEnabled())
{
handleFreeMoveKeyEvent(eventType, MOVE_UP);
}
else if (eventType == KeyEventType::KeyPressed)
{
_camera.moveUpDiscrete(SPEED_MOVE);
}
}

void CamWnd::onDownKey(KeyEventType eventType)
{
if (freeMoveEnabled())
{
handleFreeMoveKeyEvent(eventType, MOVE_DOWN);
}
else if (eventType == KeyEventType::KeyPressed)
{
_camera.moveDownDiscrete(SPEED_MOVE);
}
}

// -------------------------------------------------------------------------------

ShaderPtr CamWnd::_faceHighlightShader;
Expand Down
9 changes: 9 additions & 0 deletions radiant/camera/CamWnd.h
Expand Up @@ -141,7 +141,16 @@ class CamWnd :
void startRenderTime();
void stopRenderTime();

void onForwardKey(KeyEventType eventType);
void onBackwardKey(KeyEventType eventType);
void onLeftKey(KeyEventType eventType);
void onRightKey(KeyEventType eventType);
void onUpKey(KeyEventType eventType);
void onDownKey(KeyEventType eventType);

protected:
void handleFreeMoveKeyEvent(KeyEventType eventType, unsigned int movementFlags);

// Required overrides being a MouseToolHandler
virtual MouseTool::Result processMouseDownEvent(const MouseToolPtr& tool, const Vector2& point) override;
virtual MouseTool::Result processMouseUpEvent(const MouseToolPtr& tool, const Vector2& point) override;
Expand Down
114 changes: 0 additions & 114 deletions radiant/camera/Camera.cpp
Expand Up @@ -452,118 +452,4 @@ void Camera::rotateRightDiscrete()
setCameraAngles(angles);
}

void Camera::onForwardKey(KeyEventType eventType)
{
if (eventType == KeyEventType::KeyPressed)
{
if (freeMoveEnabled)
{
setMovementFlags(MOVE_FORWARD);
}
else
{
moveForwardDiscrete(SPEED_MOVE);
}
}
else if (freeMoveEnabled)
{
clearMovementFlags(MOVE_FORWARD);
}
}

void Camera::onBackwardKey(KeyEventType eventType)
{
if (eventType == KeyEventType::KeyPressed)
{
if (freeMoveEnabled)
{
setMovementFlags(MOVE_BACK);
}
else
{
moveBackDiscrete(SPEED_MOVE);
}
}
else if (freeMoveEnabled)
{
clearMovementFlags(MOVE_BACK);
}
}

void Camera::onLeftKey(KeyEventType eventType)
{
if (eventType == KeyEventType::KeyPressed)
{
if (freeMoveEnabled)
{
setMovementFlags(MOVE_STRAFELEFT);
}
else
{
rotateLeftDiscrete();
}
}
else if (freeMoveEnabled)
{
clearMovementFlags(MOVE_STRAFELEFT);
}
}

void Camera::onRightKey(KeyEventType eventType)
{
if (eventType == KeyEventType::KeyPressed)
{
if (freeMoveEnabled)
{
setMovementFlags(MOVE_STRAFERIGHT);
}
else
{
rotateRightDiscrete();
}
}
else if (freeMoveEnabled)
{
clearMovementFlags(MOVE_STRAFERIGHT);
}
}

void Camera::onUpKey(KeyEventType eventType)
{
if (eventType == KeyEventType::KeyPressed)
{
if (freeMoveEnabled)
{
setMovementFlags(MOVE_UP);
}
else
{
moveUpDiscrete(SPEED_MOVE);
}
}
else if (freeMoveEnabled)
{
clearMovementFlags(MOVE_UP);
}
}

void Camera::onDownKey(KeyEventType eventType)
{
if (eventType == KeyEventType::KeyPressed)
{
if (freeMoveEnabled)
{
setMovementFlags(MOVE_DOWN);
}
else
{
moveDownDiscrete(SPEED_MOVE);
}
}
else if (freeMoveEnabled)
{
clearMovementFlags(MOVE_DOWN);
}
}

} // namespace
7 changes: 0 additions & 7 deletions radiant/camera/Camera.h
Expand Up @@ -132,13 +132,6 @@ class Camera :
void moveBackDiscrete(double units);
void moveForwardDiscrete(double units);

void onForwardKey(KeyEventType eventType);
void onBackwardKey(KeyEventType eventType);
void onLeftKey(KeyEventType eventType);
void onRightKey(KeyEventType eventType);
void onUpKey(KeyEventType eventType);
void onDownKey(KeyEventType eventType);

}; // class Camera

} // namespace ui
12 changes: 6 additions & 6 deletions radiant/camera/GlobalCameraWndManager.cpp
Expand Up @@ -385,32 +385,32 @@ void GlobalCameraWndManager::doWithActiveCamWnd(const std::function<void(CamWnd&

void GlobalCameraWndManager::onFreelookMoveForwardKey(ui::KeyEventType eventType)
{
doWithActiveCamWnd([&](CamWnd& cam) { cam.getCamera().onForwardKey(eventType); });
doWithActiveCamWnd([&](CamWnd& cam) { cam.onForwardKey(eventType); });
}

void GlobalCameraWndManager::onFreelookMoveBackKey(ui::KeyEventType eventType)
{
doWithActiveCamWnd([&](CamWnd& cam) { cam.getCamera().onBackwardKey(eventType); });
doWithActiveCamWnd([&](CamWnd& cam) { cam.onBackwardKey(eventType); });
}

void GlobalCameraWndManager::onFreelookMoveLeftKey(ui::KeyEventType eventType)
{
doWithActiveCamWnd([&](CamWnd& cam) { cam.getCamera().onLeftKey(eventType); });
doWithActiveCamWnd([&](CamWnd& cam) { cam.onLeftKey(eventType); });
}

void GlobalCameraWndManager::onFreelookMoveRightKey(ui::KeyEventType eventType)
{
doWithActiveCamWnd([&](CamWnd& cam) { cam.getCamera().onRightKey(eventType); });
doWithActiveCamWnd([&](CamWnd& cam) { cam.onRightKey(eventType); });
}

void GlobalCameraWndManager::onFreelookMoveUpKey(ui::KeyEventType eventType)
{
doWithActiveCamWnd([&](CamWnd& cam) { cam.getCamera().onUpKey(eventType); });
doWithActiveCamWnd([&](CamWnd& cam) { cam.onUpKey(eventType); });
}

void GlobalCameraWndManager::onFreelookMoveDownKey(ui::KeyEventType eventType)
{
doWithActiveCamWnd([&](CamWnd& cam) { cam.getCamera().onDownKey(eventType); });
doWithActiveCamWnd([&](CamWnd& cam) { cam.onDownKey(eventType); });
}

void GlobalCameraWndManager::moveLeftDiscrete(const cmd::ArgumentList& args)
Expand Down

0 comments on commit ce728f9

Please sign in to comment.