From aefd01bd9cd3f8bf88231b15462abc1ccd79a7b9 Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Fri, 27 Mar 2020 20:00:27 +0200 Subject: [PATCH 1/5] SL-12904 FIXED Camera Preset does not restore correctly when sitting --- indra/newview/llagentcamera.cpp | 12 ++++++++++-- indra/newview/llagentcamera.h | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index a1920f0332..bac31d48a1 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -1987,13 +1987,21 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit) LLVector3 LLAgentCamera::getCurrentCameraOffset() { - LLVector3 camera_offset = (LLViewerCamera::getInstance()->getOrigin() - getAvatarRootPosition() - mThirdPersonHeadOffset) * ~gAgent.getFrameAgent().getQuaternion(); + LLVector3 camera_offset = (LLViewerCamera::getInstance()->getOrigin() - getAvatarRootPosition() - mThirdPersonHeadOffset) * ~getCurrentAvatarRotation(); return camera_offset / mCameraZoomFraction / gSavedSettings.getF32("CameraOffsetScale"); } LLVector3d LLAgentCamera::getCurrentFocusOffset() { - return (mFocusTargetGlobal - gAgent.getPositionGlobal()) * ~gAgent.getFrameAgent().getQuaternion(); + return (mFocusTargetGlobal - gAgent.getPositionGlobal()) * ~getCurrentAvatarRotation(); +} + +LLQuaternion LLAgentCamera::getCurrentAvatarRotation() +{ + LLViewerObject* sit_object = (LLViewerObject*)gAgentAvatarp->getParent(); + LLQuaternion av_rot = gAgent.getFrameAgent().getQuaternion(); + LLQuaternion obj_rot = sit_object ? sit_object->getRenderRotation() : LLQuaternion::DEFAULT; + return av_rot * obj_rot; } bool LLAgentCamera::isJoystickCameraUsed() diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h index a9f57cf956..357dd5e12a 100644 --- a/indra/newview/llagentcamera.h +++ b/indra/newview/llagentcamera.h @@ -119,6 +119,7 @@ public: LLVector3 getCurrentCameraOffset(); LLVector3d getCurrentFocusOffset(); + LLQuaternion getCurrentAvatarRotation(); bool isJoystickCameraUsed(); private: From 2dde3869171105748c1005502481c51eeff59511 Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Thu, 2 Apr 2020 15:32:04 +0300 Subject: [PATCH 2/5] SL-12927 FIXED [Camera Presets] when sitting pressing ESC key causes rotation --- indra/newview/llagentcamera.cpp | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index bac31d48a1..5a5a3efc0f 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -2312,15 +2312,7 @@ void LLAgentCamera::changeCameraToThirdPerson(BOOL animate) } // Remove any pitch from the avatar - if (isAgentAvatarValid() && gAgentAvatarp->getParent()) - { - LLQuaternion obj_rot = ((LLViewerObject*)gAgentAvatarp->getParent())->getRenderRotation(); - at_axis = LLViewerCamera::getInstance()->getAtAxis(); - at_axis.mV[VZ] = 0.f; - at_axis.normalize(); - gAgent.resetAxes(at_axis * ~obj_rot); - } - else + if (!isAgentAvatarValid() || !gAgentAvatarp->getParent()) { at_axis = gAgent.getFrameAgent().getAtAxis(); at_axis.mV[VZ] = 0.f; @@ -2691,15 +2683,7 @@ void LLAgentCamera::setFocusOnAvatar(BOOL focus_on_avatar, BOOL animate) if (mCameraMode == CAMERA_MODE_THIRD_PERSON) { LLVector3 at_axis; - if (isAgentAvatarValid() && gAgentAvatarp->getParent()) - { - LLQuaternion obj_rot = ((LLViewerObject*)gAgentAvatarp->getParent())->getRenderRotation(); - at_axis = LLViewerCamera::getInstance()->getAtAxis(); - at_axis.mV[VZ] = 0.f; - at_axis.normalize(); - gAgent.resetAxes(at_axis * ~obj_rot); - } - else + if (!isAgentAvatarValid() || !gAgentAvatarp->getParent()) { at_axis = LLViewerCamera::getInstance()->getAtAxis(); at_axis.mV[VZ] = 0.f; From 1f5bb7be28768fe5341b1ca4b5a5d366f176045e Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Mon, 6 Apr 2020 16:03:19 +0300 Subject: [PATCH 3/5] SL-12904 FIXED Camera Preset does not restore correctly when sitting --- indra/newview/llagentcamera.cpp | 6 ++---- indra/newview/llviewerkeyboard.cpp | 2 ++ 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 5a5a3efc0f..d1da132587 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -1805,7 +1805,7 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit) at_axis.normalize(); gAgent.resetAxes(at_axis * ~parent_rot); - local_camera_offset = local_camera_offset * gAgent.getFrameAgent().getQuaternion() * parent_rot; + local_camera_offset = local_camera_offset * parent_rot; } else { @@ -1999,9 +1999,7 @@ LLVector3d LLAgentCamera::getCurrentFocusOffset() LLQuaternion LLAgentCamera::getCurrentAvatarRotation() { LLViewerObject* sit_object = (LLViewerObject*)gAgentAvatarp->getParent(); - LLQuaternion av_rot = gAgent.getFrameAgent().getQuaternion(); - LLQuaternion obj_rot = sit_object ? sit_object->getRenderRotation() : LLQuaternion::DEFAULT; - return av_rot * obj_rot; + return sit_object ? sit_object->getRenderRotation() : gAgent.getFrameAgent().getQuaternion(); } bool LLAgentCamera::isJoystickCameraUsed() diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp index e930eb20d3..bccbe61f44 100644 --- a/indra/newview/llviewerkeyboard.cpp +++ b/indra/newview/llviewerkeyboard.cpp @@ -345,6 +345,7 @@ void camera_spin_around_ccw_sitting( EKeystate s ) else { //change camera but do not send keystrokes + gAgentCamera.unlockView(); gAgentCamera.setOrbitLeftKey( get_orbit_rate() ); } } @@ -361,6 +362,7 @@ void camera_spin_around_cw_sitting( EKeystate s ) else { //change camera but do not send keystrokes + gAgentCamera.unlockView(); gAgentCamera.setOrbitRightKey( get_orbit_rate() ); } } From 3bac0d4283c8d8a7f067a302c4ec0e533457c899 Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Tue, 7 Apr 2020 19:15:40 +0300 Subject: [PATCH 4/5] SL-12991 [Camera Presets] Sort all Camera preset lists in the same way --- indra/newview/llfloatercamera.cpp | 2 +- indra/newview/llfloatercamerapresets.cpp | 7 +- indra/newview/llfloatersavecamerapreset.cpp | 7 +- .../newview/llpanelpresetscamerapulldown.cpp | 3 +- indra/newview/llpanelpresetspulldown.cpp | 3 +- indra/newview/llpresetsmanager.cpp | 75 +++++++++++-------- indra/newview/llpresetsmanager.h | 4 +- 7 files changed, 54 insertions(+), 47 deletions(-) diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index cf25e35f63..cc02862868 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -585,7 +585,7 @@ void LLFloaterCamera::fromFreeToPresets() void LLFloaterCamera::populatePresetCombo() { - LLPresetsManager::getInstance()->setPresetNamesInComboBox(PRESETS_CAMERA, mPresetCombo, EDefaultOptions::DEFAULT_VIEWS_HIDE); + LLPresetsManager::getInstance()->setPresetNamesInComboBox(PRESETS_CAMERA, mPresetCombo, EDefaultOptions::DEFAULT_HIDE); std::string active_preset_name = gSavedSettings.getString("PresetCameraActive"); if (active_preset_name.empty()) { diff --git a/indra/newview/llfloatercamerapresets.cpp b/indra/newview/llfloatercamerapresets.cpp index 75660e590a..300c945a85 100644 --- a/indra/newview/llfloatercamerapresets.cpp +++ b/indra/newview/llfloatercamerapresets.cpp @@ -55,13 +55,10 @@ void LLFloaterCameraPresets::populateList() mPresetList->clear(); LLPresetsManager* presetsMgr = LLPresetsManager::getInstance(); - std::string presets_dir = presetsMgr->getPresetsDir(PRESETS_CAMERA); std::list preset_names; - presetsMgr->loadPresetNamesFromDir(presets_dir, preset_names, DEFAULT_VIEWS_HIDE); - preset_names.push_back(PRESETS_FRONT_VIEW); - preset_names.push_back(PRESETS_REAR_VIEW); - preset_names.push_back(PRESETS_SIDE_VIEW); + presetsMgr->loadPresetNamesFromDir(PRESETS_CAMERA, preset_names, DEFAULT_BOTTOM); + for (std::list::const_iterator it = preset_names.begin(); it != preset_names.end(); ++it) { const std::string& name = *it; diff --git a/indra/newview/llfloatersavecamerapreset.cpp b/indra/newview/llfloatersavecamerapreset.cpp index bbc4b5e354..34aefdf1c1 100644 --- a/indra/newview/llfloatersavecamerapreset.cpp +++ b/indra/newview/llfloatersavecamerapreset.cpp @@ -84,7 +84,7 @@ void LLFloaterSaveCameraPreset::onOpen(const LLSD& key) index = key["index"].asInteger(); } - LLPresetsManager::getInstance()->setPresetNamesInComboBox(PRESETS_CAMERA, mPresetCombo, DEFAULT_HIDE); + LLPresetsManager::getInstance()->setPresetNamesInComboBox(PRESETS_CAMERA, mPresetCombo, DEFAULT_BOTTOM); mSaveRadioGroup->setSelectedIndex(index); onPresetNameEdited(); @@ -110,8 +110,7 @@ void LLFloaterSaveCameraPreset::onBtnSave() if (is_saving_new) { std::list preset_names; - std::string presets_dir = LLPresetsManager::getInstance()->getPresetsDir(PRESETS_CAMERA); - LLPresetsManager::getInstance()->loadPresetNamesFromDir(presets_dir, preset_names, DEFAULT_HIDE); + LLPresetsManager::getInstance()->loadPresetNamesFromDir(PRESETS_CAMERA, preset_names, DEFAULT_HIDE); if (std::find(preset_names.begin(), preset_names.end(), name) != preset_names.end()) { LLSD args; @@ -133,7 +132,7 @@ void LLFloaterSaveCameraPreset::onBtnSave() void LLFloaterSaveCameraPreset::onPresetsListChange() { - LLPresetsManager::getInstance()->setPresetNamesInComboBox(PRESETS_CAMERA, mPresetCombo, DEFAULT_HIDE); + LLPresetsManager::getInstance()->setPresetNamesInComboBox(PRESETS_CAMERA, mPresetCombo, DEFAULT_BOTTOM); } void LLFloaterSaveCameraPreset::onBtnCancel() diff --git a/indra/newview/llpanelpresetscamerapulldown.cpp b/indra/newview/llpanelpresetscamerapulldown.cpp index ae3d182f09..fdf73e069e 100644 --- a/indra/newview/llpanelpresetscamerapulldown.cpp +++ b/indra/newview/llpanelpresetscamerapulldown.cpp @@ -79,8 +79,7 @@ BOOL LLPanelPresetsCameraPulldown::postBuild() void LLPanelPresetsCameraPulldown::populatePanel() { - std::string presets_dir = LLPresetsManager::getInstance()->getPresetsDir(PRESETS_CAMERA); - LLPresetsManager::getInstance()->loadPresetNamesFromDir(presets_dir, mPresetNames, DEFAULT_TOP); + LLPresetsManager::getInstance()->loadPresetNamesFromDir(PRESETS_CAMERA, mPresetNames, DEFAULT_BOTTOM); LLScrollListCtrl* scroll = getChild("preset_camera_list"); diff --git a/indra/newview/llpanelpresetspulldown.cpp b/indra/newview/llpanelpresetspulldown.cpp index 0bbf1781a5..332fd9969d 100644 --- a/indra/newview/llpanelpresetspulldown.cpp +++ b/indra/newview/llpanelpresetspulldown.cpp @@ -72,8 +72,7 @@ BOOL LLPanelPresetsPulldown::postBuild() void LLPanelPresetsPulldown::populatePanel() { - std::string presets_dir = LLPresetsManager::getInstance()->getPresetsDir(PRESETS_GRAPHIC); - LLPresetsManager::getInstance()->loadPresetNamesFromDir(presets_dir, mPresetNames, DEFAULT_TOP); + LLPresetsManager::getInstance()->loadPresetNamesFromDir(PRESETS_GRAPHIC, mPresetNames, DEFAULT_TOP); LLScrollListCtrl* scroll = getChild("preset_list"); diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index eaf139b106..b1a94be68c 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -141,8 +141,12 @@ std::string LLPresetsManager::getPresetsDir(const std::string& subdirectory) return dest_path; } -void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets, EDefaultOptions default_option) +void LLPresetsManager::loadPresetNamesFromDir(const std::string& subdirectory, preset_name_list_t& presets, EDefaultOptions default_option) { + bool IS_CAMERA = (PRESETS_CAMERA == subdirectory); + bool IS_GRAPHIC = (PRESETS_GRAPHIC == subdirectory); + + std::string dir = LLPresetsManager::getInstance()->getPresetsDir(subdirectory); LL_INFOS("AppInit") << "Loading list of preset names from " << dir << LL_ENDL; mPresetNames.clear(); @@ -160,25 +164,31 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam std::string name = LLURI::unescape(gDirUtilp->getBaseFileName(path, /*strip_exten = */ true)); LL_DEBUGS() << " Found preset '" << name << "'" << LL_ENDL; - if (isTemplateCameraPreset(name)) + if (IS_CAMERA) { - continue; - } - if (default_option == DEFAULT_VIEWS_HIDE) - { - if (isDefaultCameraPreset(name)) + if (isTemplateCameraPreset(name)) { continue; } - } - if (PRESETS_DEFAULT != name) - { + if ((default_option == DEFAULT_HIDE) || (default_option == DEFAULT_BOTTOM)) + { + if (isDefaultCameraPreset(name)) + { + continue; + } + } mPresetNames.push_back(name); } - else + if (IS_GRAPHIC) { - switch (default_option) + if (PRESETS_DEFAULT != name) { + mPresetNames.push_back(name); + } + else + { + switch (default_option) + { case DEFAULT_SHOW: mPresetNames.push_back(LLTrans::getString(PRESETS_DEFAULT)); break; @@ -190,11 +200,20 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam case DEFAULT_HIDE: default: break; + } } } } } + if (IS_CAMERA && (default_option == DEFAULT_BOTTOM)) + { + mPresetNames.sort(); + mPresetNames.push_back(PRESETS_FRONT_VIEW); + mPresetNames.push_back(PRESETS_REAR_VIEW); + mPresetNames.push_back(PRESETS_SIDE_VIEW); + } + presets = mPresetNames; } @@ -410,30 +429,24 @@ bool LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory, combo->clearRows(); combo->setEnabled(TRUE); - std::string presets_dir = getPresetsDir(subdirectory); + std::list preset_names; + loadPresetNamesFromDir(subdirectory, preset_names, default_option); - if (!presets_dir.empty()) + if (preset_names.begin() != preset_names.end()) { - std::list preset_names; - loadPresetNamesFromDir(presets_dir, preset_names, default_option); - - std::string preset_graphic_active = gSavedSettings.getString("PresetGraphicActive"); - - if (preset_names.begin() != preset_names.end()) + for (std::list::const_iterator it = preset_names.begin(); it != preset_names.end(); ++it) { - for (std::list::const_iterator it = preset_names.begin(); it != preset_names.end(); ++it) - { - const std::string& name = *it; - combo->add(name, name); - } - } - else - { - combo->setLabel(LLTrans::getString("preset_combo_label")); - combo->setEnabled(PRESETS_CAMERA != subdirectory); - sts = false; + const std::string& name = *it; + combo->add(name, name); } } + else + { + combo->setLabel(LLTrans::getString("preset_combo_label")); + combo->setEnabled(PRESETS_CAMERA != subdirectory); + sts = false; + } + return sts; } diff --git a/indra/newview/llpresetsmanager.h b/indra/newview/llpresetsmanager.h index d9ca178dd7..d5b384ceb9 100644 --- a/indra/newview/llpresetsmanager.h +++ b/indra/newview/llpresetsmanager.h @@ -48,7 +48,7 @@ enum EDefaultOptions { DEFAULT_SHOW, DEFAULT_TOP, - DEFAULT_VIEWS_HIDE, + DEFAULT_BOTTOM, DEFAULT_HIDE // Do not display "Default" in a list }; @@ -68,7 +68,7 @@ public: void triggerChangeSignal(); static std::string getPresetsDir(const std::string& subdirectory); bool setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option); - void loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets, EDefaultOptions default_option); + void loadPresetNamesFromDir(const std::string& subdirectory, preset_name_list_t& presets, EDefaultOptions default_option); bool savePreset(const std::string& subdirectory, std::string name, bool createDefault = false); void loadPreset(const std::string& subdirectory, std::string name); bool deletePreset(const std::string& subdirectory, std::string name); From 40394752f7f757012c032746ea0de48aa3c0323c Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Tue, 7 Apr 2020 21:26:13 +0300 Subject: [PATCH 5/5] SL-12991 [Camera Presets] Sort all Camera preset lists in the same way --- indra/newview/llpresetsmanager.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index b1a94be68c..fd89a1fcb6 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -206,12 +206,15 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& subdirectory, p } } - if (IS_CAMERA && (default_option == DEFAULT_BOTTOM)) + if (IS_CAMERA) { - mPresetNames.sort(); - mPresetNames.push_back(PRESETS_FRONT_VIEW); - mPresetNames.push_back(PRESETS_REAR_VIEW); - mPresetNames.push_back(PRESETS_SIDE_VIEW); + mPresetNames.sort(); + if (default_option == DEFAULT_BOTTOM) + { + mPresetNames.push_back(PRESETS_FRONT_VIEW); + mPresetNames.push_back(PRESETS_REAR_VIEW); + mPresetNames.push_back(PRESETS_SIDE_VIEW); + } } presets = mPresetNames;