From 824c219fa015219c751353b80b17b5e1f308919b Mon Sep 17 00:00:00 2001 From: Sam Gondelman Date: Tue, 23 Jun 2015 09:26:38 -0700 Subject: [PATCH] started fixing camera mode issue --- interface/src/Application.cpp | 23 ++++++++++++++++++----- interface/src/Application.h | 3 ++- interface/src/Camera.cpp | 12 +++++++----- interface/src/Menu.cpp | 22 ++++++++++++++++------ interface/src/Menu.h | 2 ++ 5 files changed, 45 insertions(+), 17 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ba6c86cafb..68e8360f3e 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -889,8 +889,11 @@ void Application::paintGL() { glEnable(GL_LINE_SMOOTH); - Menu::getInstance()->setIsOptionChecked("First Person", _myAvatar->getBoomLength() <= MyAvatar::ZOOM_MIN); - Application::getInstance()->cameraMenuChanged(); + if (!(Menu::getInstance()->isOptionChecked(MenuOption::IndependentMode) || Menu::getInstance()->isOptionChecked(MenuOption::FullscreenMirror))); { + Menu::getInstance()->setIsOptionChecked(MenuOption::FirstPerson, _myAvatar->getBoomLength() <= MyAvatar::ZOOM_MIN); + Menu::getInstance()->setIsOptionChecked(MenuOption::ThirdPerson, !(_myAvatar->getBoomLength() <= MyAvatar::ZOOM_MIN)); + Application::getInstance()->cameraMenuChanged(); + } if (_myCamera.getMode() == CAMERA_MODE_FIRST_PERSON) { // Always use the default eye position, not the actual head eye position. @@ -1380,11 +1383,17 @@ void Application::keyPressEvent(QKeyEvent* event) { if (isShifted) { Menu::getInstance()->triggerOption(MenuOption::Mirror); } else { - Menu::getInstance()->triggerOption(MenuOption::FullscreenMirror); + Menu::getInstance()->setIsOptionChecked(MenuOption::FullscreenMirror, !Menu::getInstance()->isOptionChecked(MenuOption::FullscreenMirror)); + if (!Menu::getInstance()->isOptionChecked(MenuOption::FullscreenMirror)) { + Menu::getInstance()->setIsOptionChecked(MenuOption::ThirdPerson, true); + } + cameraMenuChanged(); } break; case Qt::Key_P: - Menu::getInstance()->triggerOption(MenuOption::FirstPerson); + Menu::getInstance()->setIsOptionChecked(MenuOption::FirstPerson, !Menu::getInstance()->isOptionChecked(MenuOption::FirstPerson)); + Menu::getInstance()->setIsOptionChecked(MenuOption::ThirdPerson, !Menu::getInstance()->isOptionChecked(MenuOption::FirstPerson)); + cameraMenuChanged(); break; case Qt::Key_Slash: Menu::getInstance()->triggerOption(MenuOption::Stats); @@ -2411,13 +2420,17 @@ void Application::cameraMenuChanged() { _myCamera.setMode(CAMERA_MODE_FIRST_PERSON); _myAvatar->setBoomLength(MyAvatar::ZOOM_MIN); } - } else { + } else if (Menu::getInstance()->isOptionChecked(MenuOption::ThirdPerson)) { if (_myCamera.getMode() != CAMERA_MODE_THIRD_PERSON) { _myCamera.setMode(CAMERA_MODE_THIRD_PERSON); if (_myAvatar->getBoomLength() == MyAvatar::ZOOM_MIN) { _myAvatar->setBoomLength(MyAvatar::ZOOM_DEFAULT); } } + } else if (Menu::getInstance()->isOptionChecked(MenuOption::IndependentMode)) { + if (_myCamera.getMode() != CAMERA_MODE_INDEPENDENT) { + _myCamera.setMode(CAMERA_MODE_INDEPENDENT); + } } } diff --git a/interface/src/Application.h b/interface/src/Application.h index c9e5bea76e..dba0eb0a64 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -433,6 +433,8 @@ public slots: void notifyPacketVersionMismatch(); void domainConnectionDenied(const QString& reason); + + void cameraMenuChanged(); private slots: void clearDomainOctreeDetails(); @@ -449,7 +451,6 @@ private slots: void setFullscreen(bool fullscreen); void setEnable3DTVMode(bool enable3DTVMode); void setEnableVRMode(bool enableVRMode); - void cameraMenuChanged(); glm::vec2 getScaledScreenPoint(glm::vec2 projectedPoint); diff --git a/interface/src/Camera.cpp b/interface/src/Camera.cpp index e501b91dea..7257f10ddd 100644 --- a/interface/src/Camera.cpp +++ b/interface/src/Camera.cpp @@ -105,22 +105,24 @@ void Camera::setModeString(const QString& mode) { CameraMode targetMode = stringToMode(mode); switch (targetMode) { + case CAMERA_MODE_FIRST_PERSON: + Menu::getInstance()->setIsOptionChecked(MenuOption::FirstPerson, true); + break; case CAMERA_MODE_THIRD_PERSON: - Menu::getInstance()->setIsOptionChecked(MenuOption::FullscreenMirror, false); - Menu::getInstance()->setIsOptionChecked(MenuOption::FirstPerson, false); + Menu::getInstance()->setIsOptionChecked(MenuOption::ThirdPerson, true); break; case CAMERA_MODE_MIRROR: Menu::getInstance()->setIsOptionChecked(MenuOption::FullscreenMirror, true); - Menu::getInstance()->setIsOptionChecked(MenuOption::FirstPerson, false); break; case CAMERA_MODE_INDEPENDENT: - Menu::getInstance()->setIsOptionChecked(MenuOption::FullscreenMirror, false); - Menu::getInstance()->setIsOptionChecked(MenuOption::FirstPerson, false); + Menu::getInstance()->setIsOptionChecked(MenuOption::IndependentMode, true); break; default: break; } + Application::getInstance()->cameraMenuChanged(); + if (_mode != targetMode) { setMode(targetMode); } diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 216f733709..b7a77c559a 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -268,15 +268,25 @@ Menu::Menu() { qApp, SLOT(setFullscreen(bool))); - addCheckableActionToQMenuAndActionHash(viewMenu, MenuOption::FirstPerson, - 0, // QML Qt::Key_P, - true, qApp, SLOT(cameraMenuChanged())); + MenuWrapper* cameraModeMenu = viewMenu->addMenu("Camera Mode"); + QActionGroup* cameraModeGroup = new QActionGroup(cameraModeMenu); + cameraModeGroup->setExclusive(true); + cameraModeGroup->addAction(addCheckableActionToQMenuAndActionHash(cameraModeMenu, + MenuOption::FirstPerson, 0, // QML Qt:: Key_P + false, qApp, SLOT(cameraMenuChanged()))); + cameraModeGroup->addAction(addCheckableActionToQMenuAndActionHash(cameraModeMenu, + MenuOption::ThirdPerson, 0, + true, qApp, SLOT(cameraMenuChanged()))); + cameraModeGroup->addAction(addCheckableActionToQMenuAndActionHash(cameraModeMenu, + MenuOption::IndependentMode, 0, + false, qApp, SLOT(cameraMenuChanged()))); + cameraModeGroup->addAction(addCheckableActionToQMenuAndActionHash(cameraModeMenu, + MenuOption::FullscreenMirror, 0, // QML Qt::Key_H, + false, qApp, SLOT(cameraMenuChanged()))); + addCheckableActionToQMenuAndActionHash(viewMenu, MenuOption::Mirror, 0, //QML Qt::SHIFT | Qt::Key_H, true); - addCheckableActionToQMenuAndActionHash(viewMenu, MenuOption::FullscreenMirror, - 0, // QML Qt::Key_H, - false, qApp, SLOT(cameraMenuChanged())); addCheckableActionToQMenuAndActionHash(viewMenu, MenuOption::HMDTools, #ifdef Q_OS_MAC diff --git a/interface/src/Menu.h b/interface/src/Menu.h index 6b892ebc3c..c44bcba5fa 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -195,6 +195,8 @@ namespace MenuOption { const QString Faceshift = "Faceshift"; const QString FilterSixense = "Smooth Sixense Movement"; const QString FirstPerson = "First Person"; + const QString ThirdPerson = "Third Person"; + const QString IndependentMode = "Independent Mode"; const QString Forward = "Forward"; const QString FrameTimer = "Show Timer"; const QString Fullscreen = "Fullscreen";