Skip to content

Commit

Permalink
#5180: GlobalCamera class cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed May 16, 2020
1 parent 2e2bbb4 commit f5cd8da
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 187 deletions.
32 changes: 0 additions & 32 deletions radiant/camera/CamWnd.cpp
Expand Up @@ -155,9 +155,6 @@ CamWnd::CamWnd(wxWindow* parent) :

constructGUIComponents();

// Deactivate all commands, just to make sure
disableDiscreteMoveEvents();

// Connect the mouse button events
_wxGLWidget->Bind(wxEVT_LEFT_DOWN, &CamWnd::onGLMouseButtonPress, this);
_wxGLWidget->Bind(wxEVT_LEFT_DCLICK, &CamWnd::onGLMouseButtonPress, this);
Expand Down Expand Up @@ -824,43 +821,14 @@ void CamWnd::onSceneGraphChange()

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

void CamWnd::enableDiscreteMoveEvents()
{
GlobalEventManager().enableEvent("CameraStrafeRight");
GlobalEventManager().enableEvent("CameraStrafeLeft");
GlobalEventManager().enableEvent("CameraAngleUp");
GlobalEventManager().enableEvent("CameraAngleDown");
}

void CamWnd::disableDiscreteMoveEvents()
{
GlobalEventManager().disableEvent("CameraStrafeRight");
GlobalEventManager().disableEvent("CameraStrafeLeft");
GlobalEventManager().disableEvent("CameraAngleUp");
GlobalEventManager().disableEvent("CameraAngleDown");
}

void CamWnd::addHandlersMove()
{
_wxGLWidget->Bind(wxEVT_MOTION, &CamWnd::onGLMouseMove, this);

// Enable either the free-look movement commands or the discrete ones,
// depending on the selection
if (getCameraSettings()->discreteMovement())
{
enableDiscreteMoveEvents();
}
}

void CamWnd::removeHandlersMove()
{
_wxGLWidget->Unbind(wxEVT_MOTION, &CamWnd::onGLMouseMove, this);

// Disable either the free-look movement commands or the discrete ones, depending on the selection
if (getCameraSettings()->discreteMovement())
{
disableDiscreteMoveEvents();
}
}

void CamWnd::update()
Expand Down
3 changes: 0 additions & 3 deletions radiant/camera/CamWnd.h
Expand Up @@ -137,9 +137,6 @@ class CamWnd :
void addHandlersMove();
void removeHandlersMove();

void enableDiscreteMoveEvents();
void disableDiscreteMoveEvents();

// Increases/decreases the far clip plane distance
void farClipPlaneIn();
void farClipPlaneOut();
Expand Down
217 changes: 65 additions & 152 deletions radiant/camera/GlobalCamera.cpp
Expand Up @@ -150,9 +150,9 @@ void GlobalCameraManager::removeCamWnd(int id) {
FloatingCamWndPtr GlobalCameraManager::createFloatingWindow()
{
// Create a new floating camera window widget and return it
FloatingCamWndPtr cam(new FloatingCamWnd);
auto cam = std::make_shared<FloatingCamWnd>();

_cameras.insert(CamWndMap::value_type(cam->getId(), cam));
_cameras.emplace(cam->getId(), cam);

if (_activeCam == -1)
{
Expand All @@ -164,14 +164,13 @@ FloatingCamWndPtr GlobalCameraManager::createFloatingWindow()

void GlobalCameraManager::resetCameraAngles(const cmd::ArgumentList& args)
{
CamWndPtr camWnd = getActiveCamWnd();

if (camWnd != NULL) {
doWithActiveCamWnd([](CamWnd& camWnd)
{
Vector3 angles;
angles[CAMERA_ROLL] = angles[CAMERA_PITCH] = 0;
angles[CAMERA_YAW] = 22.5 * floor((camWnd->getCameraAngles()[CAMERA_YAW]+11)/22.5);
camWnd->setCameraAngles(angles);
}
angles[CAMERA_YAW] = 22.5 * floor((camWnd.getCameraAngles()[CAMERA_YAW] + 11) / 22.5);
camWnd.setCameraAngles(angles);
});
}

void GlobalCameraManager::increaseCameraSpeed(const cmd::ArgumentList& args) {
Expand All @@ -198,12 +197,9 @@ void GlobalCameraManager::decreaseCameraSpeed(const cmd::ArgumentList& args) {
registry::setValue(RKEY_MOVEMENT_SPEED, movementSpeed);
}

void GlobalCameraManager::benchmark() {
CamWndPtr camWnd = getActiveCamWnd();

if (camWnd != NULL) {
camWnd->benchmark();
}
void GlobalCameraManager::benchmark()
{
doWithActiveCamWnd([](CamWnd& camWnd) { camWnd.benchmark(); });
}

void GlobalCameraManager::update() {
Expand Down Expand Up @@ -240,20 +236,14 @@ void GlobalCameraManager::forceDraw()
}
}

void GlobalCameraManager::changeFloorUp(const cmd::ArgumentList& args) {
CamWndPtr camWnd = getActiveCamWnd();
if (camWnd == NULL) return;

// Pass the call to the currently active CamWnd
camWnd->changeFloor(true);
void GlobalCameraManager::changeFloorUp(const cmd::ArgumentList& args)
{
doWithActiveCamWnd([](CamWnd& camWnd) { camWnd.changeFloor(true); });
}

void GlobalCameraManager::changeFloorDown(const cmd::ArgumentList& args) {
CamWndPtr camWnd = getActiveCamWnd();
if (camWnd == NULL) return;

// Pass the call to the currently active CamWnd
camWnd->changeFloor(false);
void GlobalCameraManager::changeFloorDown(const cmd::ArgumentList& args)
{
doWithActiveCamWnd([](CamWnd& camWnd) { camWnd.changeFloor(false); });
}

void GlobalCameraManager::addCameraObserver(CameraObserver* observer) {
Expand All @@ -263,9 +253,11 @@ void GlobalCameraManager::addCameraObserver(CameraObserver* observer) {
}
}

void GlobalCameraManager::removeCameraObserver(CameraObserver* observer) {
void GlobalCameraManager::removeCameraObserver(CameraObserver* observer)
{
// Cycle through the list of observers and call the moved method
for (CameraObserverList::iterator i = _cameraObservers.begin(); i != _cameraObservers.end(); i++) {
for (CameraObserverList::iterator i = _cameraObservers.begin(); i != _cameraObservers.end(); i++)
{
CameraObserver* registered = *i;

if (registered == observer) {
Expand All @@ -275,13 +267,13 @@ void GlobalCameraManager::removeCameraObserver(CameraObserver* observer) {
}
}

void GlobalCameraManager::movedNotify() {

void GlobalCameraManager::movedNotify()
{
// Cycle through the list of observers and call the moved method
for (CameraObserverList::iterator i = _cameraObservers.begin(); i != _cameraObservers.end(); i++) {
CameraObserver* observer = *i;

if (observer != NULL) {
for (CameraObserver* observer : _cameraObservers)
{
if (observer != nullptr)
{
observer->cameraMoved();
}
}
Expand All @@ -291,26 +283,23 @@ void GlobalCameraManager::toggleLightingMode(const cmd::ArgumentList& args) {
getCameraSettings()->toggleLightingMode();
}

void GlobalCameraManager::farClipPlaneIn(const cmd::ArgumentList& args) {
CamWndPtr camWnd = getActiveCamWnd();
if (camWnd == NULL) return;

camWnd->farClipPlaneIn();
void GlobalCameraManager::farClipPlaneIn(const cmd::ArgumentList& args)
{
doWithActiveCamWnd([](CamWnd& camWnd) { camWnd.farClipPlaneIn(); });
}

void GlobalCameraManager::farClipPlaneOut(const cmd::ArgumentList& args) {
CamWndPtr camWnd = getActiveCamWnd();
if (camWnd == NULL) return;

camWnd->farClipPlaneOut();
void GlobalCameraManager::farClipPlaneOut(const cmd::ArgumentList& args)
{
doWithActiveCamWnd([](CamWnd& camWnd) { camWnd.farClipPlaneOut(); });
}

void GlobalCameraManager::focusCamera(const Vector3& point, const Vector3& angles) {
CamWndPtr camWnd = getActiveCamWnd();
if (camWnd == NULL) return;

camWnd->setCameraOrigin(point);
camWnd->setCameraAngles(angles);
void GlobalCameraManager::focusCamera(const Vector3& point, const Vector3& angles)
{
doWithActiveCamWnd([&](CamWnd& camWnd)
{
camWnd.setCameraOrigin(point);
camWnd.setCameraAngles(angles);
});
}

// --------------- Keyboard movement methods ------------------------------------------
Expand Down Expand Up @@ -368,140 +357,64 @@ void GlobalCameraManager::moveCameraCmd(const cmd::ArgumentList& args)
}
}

void GlobalCameraManager::onFreelookMoveForwardKey(ui::KeyEventType eventType)
void GlobalCameraManager::doWithActiveCamWnd(const std::function<void(CamWnd&)>& action)
{
auto camWnd = getActiveCamWnd();
if (!camWnd) return;

camWnd->getCamera().onForwardKey(eventType);
#if 0
if (eventType == ui::KeyPressed)

if (camWnd)
{
camWnd->getCamera().setMovementFlags(MOVE_FORWARD);
action(*camWnd);
}
else
{
camWnd->getCamera().clearMovementFlags(MOVE_FORWARD);
}
#endif
}

void GlobalCameraManager::onFreelookMoveBackKey(ui::KeyEventType eventType)
void GlobalCameraManager::onFreelookMoveForwardKey(ui::KeyEventType eventType)
{
auto camWnd = getActiveCamWnd();
if (!camWnd) return;
doWithActiveCamWnd([&](CamWnd& cam) { cam.getCamera().onForwardKey(eventType); });
}

camWnd->getCamera().onBackwardKey(eventType);
#if 0
if (eventType == ui::KeyPressed)
{
camWnd->getCamera().setMovementFlags(MOVE_BACK);
}
else
{
camWnd->getCamera().clearMovementFlags(MOVE_BACK);
}
#endif
void GlobalCameraManager::onFreelookMoveBackKey(ui::KeyEventType eventType)
{
doWithActiveCamWnd([&](CamWnd& cam) { cam.getCamera().onBackwardKey(eventType); });
}

void GlobalCameraManager::onFreelookMoveLeftKey(ui::KeyEventType eventType)
{
auto camWnd = getActiveCamWnd();
if (!camWnd) return;

camWnd->getCamera().onLeftKey(eventType);
#if 0
if (eventType == ui::KeyPressed)
{
camWnd->getCamera().setMovementFlags(MOVE_STRAFELEFT);
}
else
{
camWnd->getCamera().clearMovementFlags(MOVE_STRAFELEFT);
}
#endif
doWithActiveCamWnd([&](CamWnd& cam) { cam.getCamera().onLeftKey(eventType); });
}

void GlobalCameraManager::onFreelookMoveRightKey(ui::KeyEventType eventType)
{
auto camWnd = getActiveCamWnd();
if (!camWnd) return;

camWnd->getCamera().onRightKey(eventType);
#if 0
if (eventType == ui::KeyPressed)
{
camWnd->getCamera().setMovementFlags(MOVE_STRAFERIGHT);
}
else
{
camWnd->getCamera().clearMovementFlags(MOVE_STRAFERIGHT);
}
#endif
doWithActiveCamWnd([&](CamWnd& cam) { cam.getCamera().onRightKey(eventType); });
}

void GlobalCameraManager::onFreelookMoveUpKey(ui::KeyEventType eventType)
{
auto camWnd = getActiveCamWnd();
if (!camWnd) return;

camWnd->getCamera().onUpKey(eventType);
#if 0
if (eventType == ui::KeyPressed)
{
camWnd->getCamera().setMovementFlags(MOVE_UP);
}
else
{
camWnd->getCamera().clearMovementFlags(MOVE_UP);
}
#endif
doWithActiveCamWnd([&](CamWnd& cam) { cam.getCamera().onUpKey(eventType); });
}

void GlobalCameraManager::onFreelookMoveDownKey(ui::KeyEventType eventType)
{
auto camWnd = getActiveCamWnd();
if (!camWnd) return;

camWnd->getCamera().onDownKey(eventType);
#if 0
if (eventType == ui::KeyPressed)
{
camWnd->getCamera().setMovementFlags(MOVE_DOWN);
}
else
{
camWnd->getCamera().clearMovementFlags(MOVE_DOWN);
}
#endif
doWithActiveCamWnd([&](CamWnd& cam) { cam.getCamera().onDownKey(eventType); });
}

void GlobalCameraManager::moveLeftDiscrete(const cmd::ArgumentList& args) {
CamWndPtr camWnd = getActiveCamWnd();
if (camWnd == NULL) return;

camWnd->getCamera().moveLeftDiscrete(SPEED_MOVE);
void GlobalCameraManager::moveLeftDiscrete(const cmd::ArgumentList& args)
{
doWithActiveCamWnd([](CamWnd& cam) { cam.getCamera().moveLeftDiscrete(SPEED_MOVE); });
}

void GlobalCameraManager::moveRightDiscrete(const cmd::ArgumentList& args) {
CamWndPtr camWnd = getActiveCamWnd();
if (camWnd == NULL) return;

camWnd->getCamera().moveRightDiscrete(SPEED_MOVE);
void GlobalCameraManager::moveRightDiscrete(const cmd::ArgumentList& args)
{
doWithActiveCamWnd([](CamWnd& cam) { cam.getCamera().moveRightDiscrete(SPEED_MOVE); });
}

void GlobalCameraManager::pitchUpDiscrete(const cmd::ArgumentList& args) {
CamWndPtr camWnd = getActiveCamWnd();
if (camWnd == NULL) return;

camWnd->getCamera().pitchUpDiscrete();
void GlobalCameraManager::pitchUpDiscrete(const cmd::ArgumentList& args)
{
doWithActiveCamWnd([](CamWnd& cam) { cam.getCamera().pitchUpDiscrete(); });
}

void GlobalCameraManager::pitchDownDiscrete(const cmd::ArgumentList& args) {
CamWndPtr camWnd = getActiveCamWnd();
if (camWnd == NULL) return;

camWnd->getCamera().pitchDownDiscrete();
void GlobalCameraManager::pitchDownDiscrete(const cmd::ArgumentList& args)
{
doWithActiveCamWnd([](CamWnd& cam) { cam.getCamera().pitchDownDiscrete(); });
}

float GlobalCameraManager::getCameraStrafeSpeed()
Expand Down
2 changes: 2 additions & 0 deletions radiant/camera/GlobalCamera.h
Expand Up @@ -136,6 +136,8 @@ class GlobalCameraManager :
// greebo: The construct method registers all the commands
void registerCommands();
void loadCameraStrafeDefinitions();

void doWithActiveCamWnd(const std::function<void(CamWnd&)>& action);
};

} // namespace
Expand Down

0 comments on commit f5cd8da

Please sign in to comment.