Divorce HMD and Desktop flying settings, implement setters and getters, change loadData and saveData in MyAvatar.cpp

This commit is contained in:
r3tk0n 2018-07-26 15:35:12 -07:00
parent 5efd981ecd
commit f8c611b1d0
4 changed files with 76 additions and 11 deletions

View file

@ -4844,12 +4844,6 @@ void Application::loadSettings() {
isFirstPerson = (qApp->isHMDMode()); isFirstPerson = (qApp->isHMDMode());
// Flying should be disabled by default in HMD mode on first run, and it
// should be enabled by default in desktop mode.
auto myAvatar = getMyAvatar();
myAvatar->setFlyingEnabled(!isFirstPerson);
} else { } else {
// if this is not the first run, the camera will be initialized differently depending on user settings // if this is not the first run, the camera will be initialized differently depending on user settings

View file

@ -577,9 +577,11 @@ void MyAvatar::updateChildCauterization(SpatiallyNestablePointer object, bool ca
void MyAvatar::simulate(float deltaTime) { void MyAvatar::simulate(float deltaTime) {
PerformanceTimer perfTimer("simulate"); PerformanceTimer perfTimer("simulate");
animateScaleChanges(deltaTime); animateScaleChanges(deltaTime);
setFlyingEnabled(getFlyingEnabled());
if (_cauterizationNeedsUpdate) { if (_cauterizationNeedsUpdate) {
_cauterizationNeedsUpdate = false; _cauterizationNeedsUpdate = false;
@ -1131,6 +1133,8 @@ void MyAvatar::saveData() {
settings.setValue("collisionSoundURL", _collisionSoundURL); settings.setValue("collisionSoundURL", _collisionSoundURL);
settings.setValue("useSnapTurn", _useSnapTurn); settings.setValue("useSnapTurn", _useSnapTurn);
settings.setValue("userHeight", getUserHeight()); settings.setValue("userHeight", getUserHeight());
settings.setValue("flyingDesktop", getFlyingDesktopPref());
settings.setValue("flyingHMD", getFlyingHMDPref());
settings.setValue("enabledFlying", getFlyingEnabled()); settings.setValue("enabledFlying", getFlyingEnabled());
settings.endGroup(); settings.endGroup();
@ -1281,8 +1285,13 @@ void MyAvatar::loadData() {
settings.remove("avatarEntityData"); settings.remove("avatarEntityData");
} }
setAvatarEntityDataChanged(true); setAvatarEntityDataChanged(true);
// Flying preferences must be loaded before calling setFlyingEnabled()
Setting::Handle<bool> firstRunVal { Settings::firstRun, true }; Setting::Handle<bool> firstRunVal { Settings::firstRun, true };
setFlyingEnabled(firstRunVal.get() ? getFlyingEnabled() : settings.value("enabledFlying").toBool()); setFlyingDesktopPref(firstRunVal.get() ? true : settings.value("flyingDesktop").toBool());
setFlyingHMDPref(firstRunVal.get() ? false : settings.value("flyingHMD").toBool());
setFlyingEnabled(getFlyingEnabled());
setDisplayName(settings.value("displayName").toString()); setDisplayName(settings.value("displayName").toString());
setCollisionSoundURL(settings.value("collisionSoundURL", DEFAULT_AVATAR_COLLISION_SOUND_URL).toString()); setCollisionSoundURL(settings.value("collisionSoundURL", DEFAULT_AVATAR_COLLISION_SOUND_URL).toString());
setSnapTurn(settings.value("useSnapTurn", _useSnapTurn).toBool()); setSnapTurn(settings.value("useSnapTurn", _useSnapTurn).toBool());
@ -2825,6 +2834,12 @@ void MyAvatar::setFlyingEnabled(bool enabled) {
return; return;
} }
if (qApp->isHMDMode()) {
setFlyingHMDPref(enabled);
} else {
setFlyingDesktopPref(enabled);
}
_enableFlying = enabled; _enableFlying = enabled;
} }
@ -2840,7 +2855,37 @@ bool MyAvatar::isInAir() {
bool MyAvatar::getFlyingEnabled() { bool MyAvatar::getFlyingEnabled() {
// May return true even if client is not allowed to fly in the zone. // May return true even if client is not allowed to fly in the zone.
return _enableFlying; return (qApp->isHMDMode() ? getFlyingHMDPref() : getFlyingDesktopPref());
}
void MyAvatar::setFlyingDesktopPref(bool enabled) {
if (QThread::currentThread() != thread()) {
QMetaObject::invokeMethod(this, "setFlyingDesktopPref", Q_ARG(bool, enabled));
return;
}
//if (!(qApp->isHMDMode())) { _enableFlying = enabled; }
_flyingPrefDesktop = enabled;
}
bool MyAvatar::getFlyingDesktopPref() {
return _flyingPrefDesktop;
}
void MyAvatar::setFlyingHMDPref(bool enabled) {
if (QThread::currentThread() != thread()) {
QMetaObject::invokeMethod(this, "setFlyingHMDPref", Q_ARG(bool, enabled));
return;
}
//if ((qApp->isHMDMode())) { _enableFlying = enabled; }
_flyingPrefHMD = enabled;
}
bool MyAvatar::getFlyingHMDPref() {
return _flyingPrefHMD;
} }
// Public interface for targetscale // Public interface for targetscale

View file

@ -953,6 +953,30 @@ public:
*/ */
Q_INVOKABLE bool getFlyingEnabled(); Q_INVOKABLE bool getFlyingEnabled();
/**jsdoc
* @function MyAvatar.setFlyingDesktopPref
* @param {boolean} enabled
*/
Q_INVOKABLE void setFlyingDesktopPref(bool enabled);
/**jsdoc
* @function MyAvatar.getFlyingDesktopPref
* @returns {boolean}
*/
Q_INVOKABLE bool getFlyingDesktopPref();
/**jsdoc
* @function MyAvatar.setFlyingDesktopPref
* @param {boolean} enabled
*/
Q_INVOKABLE void setFlyingHMDPref(bool enabled);
/**jsdoc
* @function MyAvatar.getFlyingDesktopPref
* @returns {boolean}
*/
Q_INVOKABLE bool getFlyingHMDPref();
/**jsdoc /**jsdoc
* @function MyAvatar.getAvatarScale * @function MyAvatar.getAvatarScale
@ -1503,6 +1527,8 @@ private:
std::bitset<MAX_DRIVE_KEYS> _disabledDriveKeys; std::bitset<MAX_DRIVE_KEYS> _disabledDriveKeys;
bool _enableFlying { false }; bool _enableFlying { false };
bool _flyingPrefDesktop { true };
bool _flyingPrefHMD { false };
bool _wasPushing { false }; bool _wasPushing { false };
bool _isPushing { false }; bool _isPushing { false };
bool _isBeingPushed { false }; bool _isBeingPushed { false };

View file

@ -313,8 +313,8 @@ void setupPreferences() {
getter, setter)); getter, setter));
} }
{ {
auto getter = [=]()->bool { return myAvatar->getFlyingEnabled(); }; auto getter = [=]()->bool { return myAvatar->getFlyingHMDPref(); };
auto setter = [=](bool value) { myAvatar->setFlyingEnabled(value); }; auto setter = [=](bool value) { myAvatar->setFlyingHMDPref(value); };
preferences->addPreference(new CheckPreference(VR_MOVEMENT, "Flying & jumping", getter, setter)); preferences->addPreference(new CheckPreference(VR_MOVEMENT, "Flying & jumping", getter, setter));
} }
{ {