diff --git a/interface/resources/qml/dialogs/preferences/CheckBoxPreference.qml b/interface/resources/qml/dialogs/preferences/CheckBoxPreference.qml index f6f840bbe8..c4d5ec7272 100644 --- a/interface/resources/qml/dialogs/preferences/CheckBoxPreference.qml +++ b/interface/resources/qml/dialogs/preferences/CheckBoxPreference.qml @@ -16,10 +16,11 @@ import controlsUit 1.0 Preference { id: root height: spacer.height + Math.max(hifi.dimensions.controlLineHeight, checkBox.implicitHeight) - + property bool value: false Component.onCompleted: { checkBox.checked = preference.value; preference.value = Qt.binding(function(){ return checkBox.checked; }); + value = checkBox.checked; } function save() { @@ -47,6 +48,7 @@ Preference { onClicked: { Tablet.playSound(TabletEnums.ButtonClick); + value = checked; } anchors { diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml b/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml index a5d7b23df6..846c0600e4 100644 --- a/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml +++ b/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml @@ -123,12 +123,12 @@ Item { } // Runtime customization of preferences. - var locomotionPreference = findPreference("VR Movement", "Teleporting only / Walking and teleporting"); + var locomotionPreference = findPreference("VR Movement", "Walking"); var flyingPreference = findPreference("VR Movement", "Jumping and flying"); if (locomotionPreference && flyingPreference) { - flyingPreference.visible = (locomotionPreference.value === 1); + flyingPreference.visible = locomotionPreference.value; locomotionPreference.valueChanged.connect(function () { - flyingPreference.visible = (locomotionPreference.value === 1); + flyingPreference.visible = locomotionPreference.value; }); } if (HMD.isHeadControllerAvailable("Oculus")) { diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 848107917a..b2381366bb 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -247,6 +247,7 @@ class MyAvatar : public Avatar { Q_PROPERTY(bool isInSittingState READ getIsInSittingState WRITE setIsInSittingState); Q_PROPERTY(MyAvatar::SitStandModelType userRecenterModel READ getUserRecenterModel WRITE setUserRecenterModel); Q_PROPERTY(bool isSitStandStateLocked READ getIsSitStandStateLocked WRITE setIsSitStandStateLocked); + Q_PROPERTY(bool allowTeleporting READ getAllowTeleporting) const QString DOMINANT_LEFT_HAND = "left"; const QString DOMINANT_RIGHT_HAND = "right"; @@ -559,6 +560,9 @@ public: void setUseAdvancedMovementControls(bool useAdvancedMovementControls) { _useAdvancedMovementControls.set(useAdvancedMovementControls); } + bool getAllowTeleporting() { return _allowTeleportingSetting.get(); } + void setAllowTeleporting(bool allowTeleporting) { _allowTeleportingSetting.set(allowTeleporting); } + bool getShowPlayArea() const { return _showPlayArea.get(); } void setShowPlayArea(bool showPlayArea) { _showPlayArea.set(showPlayArea); } @@ -1889,6 +1893,7 @@ private: Setting::Handle _userHeightSetting; Setting::Handle _flyingHMDSetting; Setting::Handle _avatarEntityCountSetting; + Setting::Handle _allowTeleportingSetting { "allowTeleporting", true }; std::vector> _avatarEntityIDSettings; std::vector> _avatarEntityDataSettings; }; diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index d1fbe02759..27e51c3654 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -238,14 +238,15 @@ void setupPreferences() { static const QString VR_MOVEMENT{ "VR Movement" }; { - auto getter = [myAvatar]()->int { return myAvatar->useAdvancedMovementControls() ? 1 : 0; }; - auto setter = [myAvatar](int value) { myAvatar->setUseAdvancedMovementControls(value == 1); }; - auto preference = - new RadioButtonsPreference(VR_MOVEMENT, "Teleporting only / Walking and teleporting", getter, setter); - QStringList items; - items << "Teleporting only" << "Walking and teleporting"; - preference->setHeading("Movement mode"); - preference->setItems(items); + auto getter = [myAvatar]()->bool { return myAvatar->getAllowTeleporting(); }; + auto setter = [myAvatar](bool value) { myAvatar->setAllowTeleporting(value); }; + auto preference = new CheckPreference(VR_MOVEMENT, "Teleporting", getter, setter); + preferences->addPreference(preference); + } + { + auto getter = [myAvatar]()->bool { return myAvatar->useAdvancedMovementControls(); }; + auto setter = [myAvatar](bool value) { myAvatar->setUseAdvancedMovementControls(value); }; + auto preference = new CheckPreference(VR_MOVEMENT, "Walking", getter, setter); preferences->addPreference(preference); } { diff --git a/scripts/system/controllers/controllerModules/teleport.js b/scripts/system/controllers/controllerModules/teleport.js index 44aa04b497..8770ae8dde 100644 --- a/scripts/system/controllers/controllerModules/teleport.js +++ b/scripts/system/controllers/controllerModules/teleport.js @@ -701,7 +701,7 @@ Script.include("/~/system/libraries/controllers.js"); }; this.isReady = function(controllerData, deltaTime) { - if (Window.interstitialModeEnabled && !Window.isPhysicsEnabled()) { + if ((Window.interstitialModeEnabled && !Window.isPhysicsEnabled()) || !MyAvatar.allowTeleporting) { return makeRunningValues(false, [], []); }