mirror of
https://github.com/JulianGro/overte.git
synced 2025-08-09 18:51:39 +02:00
Add ability to toggle strafing.
This commit is contained in:
parent
0bb10544a3
commit
543d53ecde
5 changed files with 37 additions and 4 deletions
|
@ -21,7 +21,7 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{ "from": "Standard.LX", "to": "Actions.TranslateX",
|
{ "from": "Standard.LX", "to": "Actions.TranslateX",
|
||||||
"when": [ "Application.AdvancedMovement", "Application.RightHandDominant" ]
|
"when": [ "Application.AdvancedMovement", "Application.StrafeEnabled", "Application.RightHandDominant" ]
|
||||||
},
|
},
|
||||||
{ "from": "Standard.LX", "to": "Actions.Yaw",
|
{ "from": "Standard.LX", "to": "Actions.Yaw",
|
||||||
"when": [ "!Application.AdvancedMovement", "!Application.SnapTurn", "Application.RightHandDominant" ]
|
"when": [ "!Application.AdvancedMovement", "!Application.SnapTurn", "Application.RightHandDominant" ]
|
||||||
|
@ -78,7 +78,7 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{ "from": "Standard.RX", "to": "Actions.TranslateX",
|
{ "from": "Standard.RX", "to": "Actions.TranslateX",
|
||||||
"when": [ "Application.AdvancedMovement", "Application.LeftHandDominant" ]
|
"when": [ "Application.AdvancedMovement", "Application.StrafeEnabled", "Application.LeftHandDominant" ]
|
||||||
},
|
},
|
||||||
{ "from": "Standard.RX", "to": "Actions.Yaw",
|
{ "from": "Standard.RX", "to": "Actions.Yaw",
|
||||||
"when": [ "!Application.AdvancedMovement", "!Application.SnapTurn", "Application.LeftHandDominant" ]
|
"when": [ "!Application.AdvancedMovement", "!Application.SnapTurn", "Application.LeftHandDominant" ]
|
||||||
|
|
|
@ -701,6 +701,7 @@ static const QString STATE_PLATFORM_MAC = "PlatformMac";
|
||||||
static const QString STATE_PLATFORM_ANDROID = "PlatformAndroid";
|
static const QString STATE_PLATFORM_ANDROID = "PlatformAndroid";
|
||||||
static const QString STATE_LEFT_HAND_DOMINANT = "LeftHandDominant";
|
static const QString STATE_LEFT_HAND_DOMINANT = "LeftHandDominant";
|
||||||
static const QString STATE_RIGHT_HAND_DOMINANT = "RightHandDominant";
|
static const QString STATE_RIGHT_HAND_DOMINANT = "RightHandDominant";
|
||||||
|
static const QString STATE_STRAFE_ENABLED = "StrafeEnabled";
|
||||||
|
|
||||||
// Statically provided display and input plugins
|
// Statically provided display and input plugins
|
||||||
extern DisplayPluginList getDisplayPlugins();
|
extern DisplayPluginList getDisplayPlugins();
|
||||||
|
@ -902,7 +903,7 @@ bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) {
|
||||||
controller::StateController::setStateVariables({ { STATE_IN_HMD, STATE_CAMERA_FULL_SCREEN_MIRROR,
|
controller::StateController::setStateVariables({ { STATE_IN_HMD, STATE_CAMERA_FULL_SCREEN_MIRROR,
|
||||||
STATE_CAMERA_FIRST_PERSON, STATE_CAMERA_THIRD_PERSON, STATE_CAMERA_ENTITY, STATE_CAMERA_INDEPENDENT,
|
STATE_CAMERA_FIRST_PERSON, STATE_CAMERA_THIRD_PERSON, STATE_CAMERA_ENTITY, STATE_CAMERA_INDEPENDENT,
|
||||||
STATE_SNAP_TURN, STATE_ADVANCED_MOVEMENT_CONTROLS, STATE_GROUNDED, STATE_NAV_FOCUSED,
|
STATE_SNAP_TURN, STATE_ADVANCED_MOVEMENT_CONTROLS, STATE_GROUNDED, STATE_NAV_FOCUSED,
|
||||||
STATE_PLATFORM_WINDOWS, STATE_PLATFORM_MAC, STATE_PLATFORM_ANDROID, STATE_LEFT_HAND_DOMINANT, STATE_RIGHT_HAND_DOMINANT } });
|
STATE_PLATFORM_WINDOWS, STATE_PLATFORM_MAC, STATE_PLATFORM_ANDROID, STATE_LEFT_HAND_DOMINANT, STATE_RIGHT_HAND_DOMINANT, STATE_STRAFE_ENABLED } });
|
||||||
DependencyManager::set<UserInputMapper>();
|
DependencyManager::set<UserInputMapper>();
|
||||||
DependencyManager::set<controller::ScriptingInterface, ControllerScriptingInterface>();
|
DependencyManager::set<controller::ScriptingInterface, ControllerScriptingInterface>();
|
||||||
DependencyManager::set<InterfaceParentFinder>();
|
DependencyManager::set<InterfaceParentFinder>();
|
||||||
|
@ -1741,6 +1742,9 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
|
||||||
_applicationStateDevice->setInputVariant(STATE_RIGHT_HAND_DOMINANT, []() -> float {
|
_applicationStateDevice->setInputVariant(STATE_RIGHT_HAND_DOMINANT, []() -> float {
|
||||||
return qApp->getMyAvatar()->getDominantHand() == "right" ? 1 : 0;
|
return qApp->getMyAvatar()->getDominantHand() == "right" ? 1 : 0;
|
||||||
});
|
});
|
||||||
|
_applicationStateDevice->setInputVariant(STATE_STRAFE_ENABLED, []() -> float {
|
||||||
|
return qApp->getMyAvatar()->getStrafeEnabled() ? 1 : 0;
|
||||||
|
});
|
||||||
|
|
||||||
_applicationStateDevice->setInputVariant(STATE_GROUNDED, []() -> float {
|
_applicationStateDevice->setInputVariant(STATE_GROUNDED, []() -> float {
|
||||||
return qApp->getMyAvatar()->getCharacterController()->onGround() ? 1 : 0;
|
return qApp->getMyAvatar()->getCharacterController()->onGround() ? 1 : 0;
|
||||||
|
|
|
@ -155,6 +155,7 @@ MyAvatar::MyAvatar(QThread* thread) :
|
||||||
_prevShouldDrawHead(true),
|
_prevShouldDrawHead(true),
|
||||||
_audioListenerMode(FROM_HEAD),
|
_audioListenerMode(FROM_HEAD),
|
||||||
_dominantHandSetting(QStringList() << AVATAR_SETTINGS_GROUP_NAME << "dominantHand", DOMINANT_RIGHT_HAND),
|
_dominantHandSetting(QStringList() << AVATAR_SETTINGS_GROUP_NAME << "dominantHand", DOMINANT_RIGHT_HAND),
|
||||||
|
_strafeEnabledSetting(QStringList() << AVATAR_SETTINGS_GROUP_NAME << "strafeEnabled", DEFAULT_STRAFE_ENABLED),
|
||||||
_hmdAvatarAlignmentTypeSetting(QStringList() << AVATAR_SETTINGS_GROUP_NAME << "hmdAvatarAlignmentType", DEFAULT_HMD_AVATAR_ALIGNMENT_TYPE),
|
_hmdAvatarAlignmentTypeSetting(QStringList() << AVATAR_SETTINGS_GROUP_NAME << "hmdAvatarAlignmentType", DEFAULT_HMD_AVATAR_ALIGNMENT_TYPE),
|
||||||
_headPitchSetting(QStringList() << AVATAR_SETTINGS_GROUP_NAME << "", 0.0f),
|
_headPitchSetting(QStringList() << AVATAR_SETTINGS_GROUP_NAME << "", 0.0f),
|
||||||
_scaleSetting(QStringList() << AVATAR_SETTINGS_GROUP_NAME << "scale", _targetScale),
|
_scaleSetting(QStringList() << AVATAR_SETTINGS_GROUP_NAME << "scale", _targetScale),
|
||||||
|
@ -329,6 +330,14 @@ QString MyAvatar::getDominantHand() const {
|
||||||
return _dominantHand.get();
|
return _dominantHand.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MyAvatar::setStrafeEnabled(bool enabled) {
|
||||||
|
_strafeEnabled.set(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MyAvatar::getStrafeEnabled() const {
|
||||||
|
return _strafeEnabled.get();
|
||||||
|
}
|
||||||
|
|
||||||
void MyAvatar::setDominantHand(const QString& hand) {
|
void MyAvatar::setDominantHand(const QString& hand) {
|
||||||
if (hand == DOMINANT_LEFT_HAND || hand == DOMINANT_RIGHT_HAND) {
|
if (hand == DOMINANT_LEFT_HAND || hand == DOMINANT_RIGHT_HAND) {
|
||||||
_dominantHand.set(hand);
|
_dominantHand.set(hand);
|
||||||
|
@ -1262,6 +1271,7 @@ void MyAvatar::resizeAvatarEntitySettingHandles(uint32_t maxIndex) {
|
||||||
|
|
||||||
void MyAvatar::saveData() {
|
void MyAvatar::saveData() {
|
||||||
_dominantHandSetting.set(getDominantHand());
|
_dominantHandSetting.set(getDominantHand());
|
||||||
|
_strafeEnabledSetting.set(getStrafeEnabled());
|
||||||
_hmdAvatarAlignmentTypeSetting.set(getHmdAvatarAlignmentType());
|
_hmdAvatarAlignmentTypeSetting.set(getHmdAvatarAlignmentType());
|
||||||
_headPitchSetting.set(getHead()->getBasePitch());
|
_headPitchSetting.set(getHead()->getBasePitch());
|
||||||
_scaleSetting.set(_targetScale);
|
_scaleSetting.set(_targetScale);
|
||||||
|
@ -1882,6 +1892,7 @@ void MyAvatar::loadData() {
|
||||||
setCollisionSoundURL(_collisionSoundURLSetting.get(QUrl(DEFAULT_AVATAR_COLLISION_SOUND_URL)).toString());
|
setCollisionSoundURL(_collisionSoundURLSetting.get(QUrl(DEFAULT_AVATAR_COLLISION_SOUND_URL)).toString());
|
||||||
setSnapTurn(_useSnapTurnSetting.get());
|
setSnapTurn(_useSnapTurnSetting.get());
|
||||||
setDominantHand(_dominantHandSetting.get(DOMINANT_RIGHT_HAND).toLower());
|
setDominantHand(_dominantHandSetting.get(DOMINANT_RIGHT_HAND).toLower());
|
||||||
|
setStrafeEnabled(_strafeEnabledSetting.get(DEFAULT_STRAFE_ENABLED));
|
||||||
setHmdAvatarAlignmentType(_hmdAvatarAlignmentTypeSetting.get(DEFAULT_HMD_AVATAR_ALIGNMENT_TYPE).toLower());
|
setHmdAvatarAlignmentType(_hmdAvatarAlignmentTypeSetting.get(DEFAULT_HMD_AVATAR_ALIGNMENT_TYPE).toLower());
|
||||||
setUserHeight(_userHeightSetting.get(DEFAULT_AVATAR_HEIGHT));
|
setUserHeight(_userHeightSetting.get(DEFAULT_AVATAR_HEIGHT));
|
||||||
setTargetScale(_scaleSetting.get());
|
setTargetScale(_scaleSetting.get());
|
||||||
|
|
|
@ -272,6 +272,8 @@ class MyAvatar : public Avatar {
|
||||||
const float DEFAULT_GEAR_3 = 0.8f;
|
const float DEFAULT_GEAR_3 = 0.8f;
|
||||||
const float DEFAULT_GEAR_4 = 0.9f;
|
const float DEFAULT_GEAR_4 = 0.9f;
|
||||||
const float DEFAULT_GEAR_5 = 1.0f;
|
const float DEFAULT_GEAR_5 = 1.0f;
|
||||||
|
|
||||||
|
const bool DEFAULT_STRAFE_ENABLED = true;
|
||||||
public:
|
public:
|
||||||
enum DriveKeys {
|
enum DriveKeys {
|
||||||
TRANSLATE_X = 0,
|
TRANSLATE_X = 0,
|
||||||
|
@ -546,7 +548,16 @@ public:
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
Q_INVOKABLE QString getDominantHand() const;
|
Q_INVOKABLE QString getDominantHand() const;
|
||||||
|
/**jsdoc
|
||||||
|
* @function MyAVatar.setStrafeEnabled
|
||||||
|
* @param {bool} enabled
|
||||||
|
*/
|
||||||
|
Q_INVOKABLE void setStrafeEnabled(bool enabled);
|
||||||
|
/**jsdoc
|
||||||
|
* @function MyAvatar.getStrafeEnabled
|
||||||
|
* @returns {bool}
|
||||||
|
*/
|
||||||
|
Q_INVOKABLE bool getStrafeEnabled() const;
|
||||||
/**jsdoc
|
/**jsdoc
|
||||||
* @function MyAvatar.setHmdAvatarAlignmentType
|
* @function MyAvatar.setHmdAvatarAlignmentType
|
||||||
* @param {string} hand
|
* @param {string} hand
|
||||||
|
@ -1909,6 +1920,7 @@ private:
|
||||||
bool _useSnapTurn { true };
|
bool _useSnapTurn { true };
|
||||||
ThreadSafeValueCache<QString> _dominantHand { DOMINANT_RIGHT_HAND };
|
ThreadSafeValueCache<QString> _dominantHand { DOMINANT_RIGHT_HAND };
|
||||||
ThreadSafeValueCache<QString> _hmdAvatarAlignmentType { DEFAULT_HMD_AVATAR_ALIGNMENT_TYPE };
|
ThreadSafeValueCache<QString> _hmdAvatarAlignmentType { DEFAULT_HMD_AVATAR_ALIGNMENT_TYPE };
|
||||||
|
ThreadSafeValueCache<bool> _strafeEnabled{ DEFAULT_STRAFE_ENABLED };
|
||||||
|
|
||||||
const float ROLL_CONTROL_DEAD_ZONE_DEFAULT = 8.0f; // degrees
|
const float ROLL_CONTROL_DEAD_ZONE_DEFAULT = 8.0f; // degrees
|
||||||
const float ROLL_CONTROL_RATE_DEFAULT = 114.0f; // degrees / sec
|
const float ROLL_CONTROL_RATE_DEFAULT = 114.0f; // degrees / sec
|
||||||
|
@ -2089,6 +2101,7 @@ private:
|
||||||
TimePoint _nextTraitsSendWindow;
|
TimePoint _nextTraitsSendWindow;
|
||||||
|
|
||||||
Setting::Handle<QString> _dominantHandSetting;
|
Setting::Handle<QString> _dominantHandSetting;
|
||||||
|
Setting::Handle<bool> _strafeEnabledSetting;
|
||||||
Setting::Handle<QString> _hmdAvatarAlignmentTypeSetting;
|
Setting::Handle<QString> _hmdAvatarAlignmentTypeSetting;
|
||||||
Setting::Handle<float> _headPitchSetting;
|
Setting::Handle<float> _headPitchSetting;
|
||||||
Setting::Handle<float> _scaleSetting;
|
Setting::Handle<float> _scaleSetting;
|
||||||
|
|
|
@ -266,6 +266,11 @@ void setupPreferences() {
|
||||||
auto preference = new CheckPreference(VR_MOVEMENT, "Walking", getter, setter);
|
auto preference = new CheckPreference(VR_MOVEMENT, "Walking", getter, setter);
|
||||||
preferences->addPreference(preference);
|
preferences->addPreference(preference);
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
auto getter = [myAvatar]()->bool { return myAvatar->getStrafeEnabled(); };
|
||||||
|
auto setter = [myAvatar](bool value) { myAvatar->setStrafeEnabled(value); };
|
||||||
|
preferences->addPreference(new CheckPreference(VR_MOVEMENT, "Strafing", getter, setter));
|
||||||
|
}
|
||||||
{
|
{
|
||||||
auto getter = [myAvatar]()->bool { return myAvatar->getFlyingHMDPref(); };
|
auto getter = [myAvatar]()->bool { return myAvatar->getFlyingHMDPref(); };
|
||||||
auto setter = [myAvatar](bool value) { myAvatar->setFlyingHMDPref(value); };
|
auto setter = [myAvatar](bool value) { myAvatar->setFlyingHMDPref(value); };
|
||||||
|
|
Loading…
Reference in a new issue