From 06203d44d8b52b9aad0b9e984eaee05d1a660c9a Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Tue, 22 May 2018 17:08:28 -0700 Subject: [PATCH] Correct `Camera.mode` command. --- interface/src/Application.cpp | 21 +++++++++++++++------ interface/src/Application.h | 2 ++ interface/src/avatar/MyAvatar.cpp | 5 +++++ 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 6a102f418b..4be3a7ec2f 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -4632,12 +4632,6 @@ void Application::idle() { _overlayConductor.update(secondsSinceLastUpdate); - auto myAvatar = getMyAvatar(); - if (_myCamera.getMode() == CAMERA_MODE_FIRST_PERSON || _myCamera.getMode() == CAMERA_MODE_THIRD_PERSON) { - Menu::getInstance()->setIsOptionChecked(MenuOption::FirstPerson, myAvatar->getBoomLength() <= MyAvatar::ZOOM_MIN); - Menu::getInstance()->setIsOptionChecked(MenuOption::ThirdPerson, !(myAvatar->getBoomLength() <= MyAvatar::ZOOM_MIN)); - cameraMenuChanged(); - } _gameLoopCounter.increment(); } @@ -5184,6 +5178,21 @@ void Application::cameraModeChanged() { cameraMenuChanged(); } +void Application::changeViewAsNeeded(float boomLength) { + // Switch between first and third person views as needed + // This is called when the boom length has changed + bool boomLengthGreaterThanMinimum = (boomLength > MyAvatar::ZOOM_MIN); + + if (_myCamera.getMode() == CAMERA_MODE_FIRST_PERSON && boomLengthGreaterThanMinimum) { + Menu::getInstance()->setIsOptionChecked(MenuOption::FirstPerson, false); + Menu::getInstance()->setIsOptionChecked(MenuOption::ThirdPerson, true); + cameraMenuChanged(); + } else if (_myCamera.getMode() == CAMERA_MODE_THIRD_PERSON && !boomLengthGreaterThanMinimum) { + Menu::getInstance()->setIsOptionChecked(MenuOption::FirstPerson, true); + Menu::getInstance()->setIsOptionChecked(MenuOption::ThirdPerson, false); + cameraMenuChanged(); + } +} void Application::cameraMenuChanged() { auto menu = Menu::getInstance(); diff --git a/interface/src/Application.h b/interface/src/Application.h index ee97077002..9d7451c2d1 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -417,6 +417,8 @@ public slots: void updateVerboseLogging(); + void changeViewAsNeeded(float boomLength); + private slots: void onDesktopRootItemCreated(QQuickItem* qmlContext); void onDesktopRootContextCreated(QQmlContext* qmlContext); diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 5fb4e80b80..3c1cc7dbd2 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -2248,6 +2248,11 @@ void MyAvatar::updateActionMotor(float deltaTime) { float boomChange = getDriveKey(ZOOM); _boomLength += 2.0f * _boomLength * boomChange + boomChange * boomChange; _boomLength = glm::clamp(_boomLength, ZOOM_MIN, ZOOM_MAX); + + // May need to change view if boom length has changed + if (fabs(boomChange) > 0.0) { + qApp->changeViewAsNeeded(_boomLength); + } } void MyAvatar::updatePosition(float deltaTime) {