Add mouse look preference setting

This commit is contained in:
ksuprynowicz 2023-06-20 21:18:33 +02:00
parent e6f2ba65fd
commit 98282d1255
4 changed files with 47 additions and 1 deletions

View file

@ -335,7 +335,7 @@ Item {
anchors.fill: stackView
id: controllerPrefereneces
objectName: "TabletControllerPreferences"
showCategories: ["VR Movement", "Game Controller", "Sixense Controllers", "Perception Neuron", "Leap Motion", "Open Sound Control (OSC)"]
showCategories: ["Desktop Movement", "VR Movement", "Game Controller", "Sixense Controllers", "Perception Neuron", "Leap Motion", "Open Sound Control (OSC)"]
categoryProperties: {
"VR Movement" : {
"User real-world height (meters)" : { "anchors.right" : "undefined" },

View file

@ -343,6 +343,13 @@ void setupPreferences() {
preferences->addPreference(preference);
}
static const QString DESKTOP_MOVEMENT{ "Desktop Movement" };
{
auto getter = []()->bool { return qApp->getCamera().getMouseLook(); };
auto setter = [](bool value) { qApp->getCamera().setMouseLook(value); };
auto preference = new CheckPreference(DESKTOP_MOVEMENT, "Mouse look (toggle with M key)", getter, setter);
preferences->addPreference(preference);
}
static const QString VR_MOVEMENT{ "VR Movement" };
{
auto getter = [myAvatar]()->bool { return myAvatar->getAllowTeleporting(); };

View file

@ -189,6 +189,13 @@ QString Camera::getModeString() const {
return modeToString(_mode);
}
void Camera::setMouseLook(bool mouseLook) { Setting::Handle<bool>{"MouseLookAllowed", false }.set(mouseLook);
if (!mouseLook) {
setCaptureMouse(false);
}
emit mouseLookChanged(mouseLook);
}
void Camera::lookAt(const glm::vec3& lookAt) {
glm::vec3 up = IDENTITY_UP;
glm::mat4 lookAtMatrix = glm::lookAt(_position, lookAt, up);

View file

@ -15,6 +15,7 @@
#include "../GLMHelpers.h"
#include "../RegisteredMetaTypes.h"
#include "../ViewFrustum.h"
#include "../SettingHandle.h"
enum CameraMode
{
@ -130,6 +131,23 @@ public slots:
*/
void setCaptureMouse(bool captureMouse) { _captureMouse = captureMouse; emit captureMouseChanged(captureMouse); }
/*@jsdoc
* Gets the current mouse look setting state.
* @function Camera.getMouseLook
* @returns {boolean} <code>true</code> if the mouse look setting is enabled (mouse look can be toggled with M key in this
* mode), <code>false</code> if the mouse look setting is disabled.
*/
bool getMouseLook() const { return Setting::Handle<bool>{"MouseLookAllowed", false }.get(); }
/*@jsdoc
* Sets the mouse look setting state. When <code>true</code>, the mouse look setting is enabled (mouse look can be toggled
* with M key in this mode). When <code>false</code>, the mouse behaves normally.
* @function Camera.setMouseLook
* @param {boolean} mouseLook - <code>true</code> to enable mouse look setting, <code>false</code> to disable mouse look
* setting.
*/
void setMouseLook(bool mouseLook);
/*@jsdoc
* Gets the current camera sensitivity.
* @function Camera.getSensitivity
@ -229,6 +247,20 @@ signals:
*/
void captureMouseChanged(bool newCaptureMouse);
/*@jsdoc
* Triggered when mouse look setting changes.
* @function Camera.mouseLookChanged
* @param {boolean} mouseLookChanged - The new mouse look state.
* @returns {Signal}
* @example <caption>Report mouse look state changes.</caption>
* function onMouseLookChanged(newMouseLook) {
* print("The mouse look has changed to " + newMouseLook);
* }
*
* Camera.mouseLookChanged.connect(onMouseLookChanged);
*/
void mouseLookChanged(bool newMouseLook);
private:
void recompose();
void decompose();