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());
// 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 {
// 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) {
PerformanceTimer perfTimer("simulate");
animateScaleChanges(deltaTime);
setFlyingEnabled(getFlyingEnabled());
if (_cauterizationNeedsUpdate) {
_cauterizationNeedsUpdate = false;
@ -1131,6 +1133,8 @@ void MyAvatar::saveData() {
settings.setValue("collisionSoundURL", _collisionSoundURL);
settings.setValue("useSnapTurn", _useSnapTurn);
settings.setValue("userHeight", getUserHeight());
settings.setValue("flyingDesktop", getFlyingDesktopPref());
settings.setValue("flyingHMD", getFlyingHMDPref());
settings.setValue("enabledFlying", getFlyingEnabled());
settings.endGroup();
@ -1281,8 +1285,13 @@ void MyAvatar::loadData() {
settings.remove("avatarEntityData");
}
setAvatarEntityDataChanged(true);
// Flying preferences must be loaded before calling setFlyingEnabled()
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());
setCollisionSoundURL(settings.value("collisionSoundURL", DEFAULT_AVATAR_COLLISION_SOUND_URL).toString());
setSnapTurn(settings.value("useSnapTurn", _useSnapTurn).toBool());
@ -2825,6 +2834,12 @@ void MyAvatar::setFlyingEnabled(bool enabled) {
return;
}
if (qApp->isHMDMode()) {
setFlyingHMDPref(enabled);
} else {
setFlyingDesktopPref(enabled);
}
_enableFlying = enabled;
}
@ -2840,7 +2855,37 @@ bool MyAvatar::isInAir() {
bool MyAvatar::getFlyingEnabled() {
// 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

View file

@ -953,6 +953,30 @@ public:
*/
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
* @function MyAvatar.getAvatarScale
@ -1503,6 +1527,8 @@ private:
std::bitset<MAX_DRIVE_KEYS> _disabledDriveKeys;
bool _enableFlying { false };
bool _flyingPrefDesktop { true };
bool _flyingPrefHMD { false };
bool _wasPushing { false };
bool _isPushing { false };
bool _isBeingPushed { false };

View file

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