From 84bad9316d9b49c8f29dcc9c1d655c3fe6ac19a2 Mon Sep 17 00:00:00 2001 From: Rob Cutmore <robcutmore@gmail.com> Date: Thu, 6 Apr 2017 19:40:26 -0400 Subject: [PATCH] Editor: flag orbit camera for re-initialization After swapping cells the orbit cam controller needs to be re-initialized to properly center on the new cell. --- apps/opencs/view/render/cameracontroller.cpp | 5 +++++ apps/opencs/view/render/cameracontroller.hpp | 3 +++ apps/opencs/view/render/unpagedworldspacewidget.cpp | 2 ++ 3 files changed, 10 insertions(+) diff --git a/apps/opencs/view/render/cameracontroller.cpp b/apps/opencs/view/render/cameracontroller.cpp index 7e3570657..288e2da07 100644 --- a/apps/opencs/view/render/cameracontroller.cpp +++ b/apps/opencs/view/render/cameracontroller.cpp @@ -632,6 +632,11 @@ namespace CSVRender getCamera()->getViewMatrix().orthoNormal(getCamera()->getViewMatrix()); } + void OrbitCameraController::reset() + { + mInitialized = false; + } + void OrbitCameraController::onActivate() { mInitialized = false; diff --git a/apps/opencs/view/render/cameracontroller.hpp b/apps/opencs/view/render/cameracontroller.hpp index 97af85790..f15cec231 100644 --- a/apps/opencs/view/render/cameracontroller.hpp +++ b/apps/opencs/view/render/cameracontroller.hpp @@ -159,6 +159,9 @@ namespace CSVRender void update(double dt); + /// \brief Flag controller to be re-initialized. + void reset(); + private: void onActivate(); diff --git a/apps/opencs/view/render/unpagedworldspacewidget.cpp b/apps/opencs/view/render/unpagedworldspacewidget.cpp index 28e269ded..b82aa45b2 100644 --- a/apps/opencs/view/render/unpagedworldspacewidget.cpp +++ b/apps/opencs/view/render/unpagedworldspacewidget.cpp @@ -15,6 +15,7 @@ #include "../widget/scenetooltoggle.hpp" #include "../widget/scenetooltoggle2.hpp" +#include "cameracontroller.hpp" #include "mask.hpp" #include "tagbase.hpp" @@ -93,6 +94,7 @@ bool CSVRender::UnpagedWorldspaceWidget::handleDrop (const std::vector<CSMWorld: mCell.reset (new Cell (getDocument().getData(), mRootNode, mCellId)); mCamPositionSet = false; + mOrbitCamControl->reset(); update(); emit cellChanged(*universalIdData.begin());