mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 01:24:36 +02:00
namechange keyboardMotor --> actionMotor
This commit is contained in:
parent
2f39968a03
commit
c64612c42b
5 changed files with 30 additions and 30 deletions
|
@ -500,7 +500,7 @@ Menu::Menu() {
|
||||||
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::RenderSensorToWorldMatrix, 0, false,
|
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::RenderSensorToWorldMatrix, 0, false,
|
||||||
avatar, SLOT(setEnableDebugDrawSensorToWorldMatrix(bool)));
|
avatar, SLOT(setEnableDebugDrawSensorToWorldMatrix(bool)));
|
||||||
|
|
||||||
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::KeyboardMotorControl,
|
addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::ActionMotorControl,
|
||||||
Qt::CTRL | Qt::SHIFT | Qt::Key_K, true, avatar, SLOT(updateMotionBehaviorFromMenu()),
|
Qt::CTRL | Qt::SHIFT | Qt::Key_K, true, avatar, SLOT(updateMotionBehaviorFromMenu()),
|
||||||
UNSPECIFIED_POSITION, "Developer");
|
UNSPECIFIED_POSITION, "Developer");
|
||||||
|
|
||||||
|
|
|
@ -116,7 +116,7 @@ namespace MenuOption {
|
||||||
const QString IncreaseAvatarSize = "Increase Avatar Size";
|
const QString IncreaseAvatarSize = "Increase Avatar Size";
|
||||||
const QString IndependentMode = "Independent Mode";
|
const QString IndependentMode = "Independent Mode";
|
||||||
const QString InputMenu = "Avatar>Input Devices";
|
const QString InputMenu = "Avatar>Input Devices";
|
||||||
const QString KeyboardMotorControl = "Enable Keyboard Motor Control";
|
const QString ActionMotorControl = "Enable Default Motor Control";
|
||||||
const QString LeapMotionOnHMD = "Leap Motion on HMD";
|
const QString LeapMotionOnHMD = "Leap Motion on HMD";
|
||||||
const QString LoadScript = "Open and Run Script File...";
|
const QString LoadScript = "Open and Run Script File...";
|
||||||
const QString LoadScriptURL = "Open and Run Script from URL...";
|
const QString LoadScriptURL = "Open and Run Script from URL...";
|
||||||
|
|
|
@ -60,7 +60,7 @@ const glm::vec3 DEFAULT_UP_DIRECTION(0.0f, 1.0f, 0.0f);
|
||||||
const float DEFAULT_REAL_WORLD_FIELD_OF_VIEW_DEGREES = 30.0f;
|
const float DEFAULT_REAL_WORLD_FIELD_OF_VIEW_DEGREES = 30.0f;
|
||||||
|
|
||||||
const float MAX_WALKING_SPEED = 2.6f; // human walking speed
|
const float MAX_WALKING_SPEED = 2.6f; // human walking speed
|
||||||
const float MAX_BOOST_SPEED = 0.5f * MAX_WALKING_SPEED; // keyboard motor gets additive boost below this speed
|
const float MAX_BOOST_SPEED = 0.5f * MAX_WALKING_SPEED; // action motor gets additive boost below this speed
|
||||||
const float MIN_AVATAR_SPEED = 0.05f;
|
const float MIN_AVATAR_SPEED = 0.05f;
|
||||||
const float MIN_AVATAR_SPEED_SQUARED = MIN_AVATAR_SPEED * MIN_AVATAR_SPEED; // speed is set to zero below this
|
const float MIN_AVATAR_SPEED_SQUARED = MIN_AVATAR_SPEED * MIN_AVATAR_SPEED; // speed is set to zero below this
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ const float PITCH_SPEED_DEFAULT = 90.0f; // degrees/sec
|
||||||
// TODO: normalize avatar speed for standard avatar size, then scale all motion logic
|
// TODO: normalize avatar speed for standard avatar size, then scale all motion logic
|
||||||
// to properly follow avatar size.
|
// to properly follow avatar size.
|
||||||
float MAX_AVATAR_SPEED = 30.0f;
|
float MAX_AVATAR_SPEED = 30.0f;
|
||||||
float MAX_KEYBOARD_MOTOR_SPEED = MAX_AVATAR_SPEED;
|
float MAX_ACTION_MOTOR_SPEED = MAX_AVATAR_SPEED;
|
||||||
float MIN_SCRIPTED_MOTOR_TIMESCALE = 0.005f;
|
float MIN_SCRIPTED_MOTOR_TIMESCALE = 0.005f;
|
||||||
float DEFAULT_SCRIPTED_MOTOR_TIMESCALE = 1.0e6f;
|
float DEFAULT_SCRIPTED_MOTOR_TIMESCALE = 1.0e6f;
|
||||||
const int SCRIPTED_MOTOR_CAMERA_FRAME = 0;
|
const int SCRIPTED_MOTOR_CAMERA_FRAME = 0;
|
||||||
|
@ -92,7 +92,7 @@ MyAvatar::MyAvatar(RigPointer rig) :
|
||||||
_yawSpeed(YAW_SPEED_DEFAULT),
|
_yawSpeed(YAW_SPEED_DEFAULT),
|
||||||
_pitchSpeed(PITCH_SPEED_DEFAULT),
|
_pitchSpeed(PITCH_SPEED_DEFAULT),
|
||||||
_thrust(0.0f),
|
_thrust(0.0f),
|
||||||
_keyboardMotorVelocity(0.0f),
|
_actionMotorVelocity(0.0f),
|
||||||
_scriptedMotorVelocity(0.0f),
|
_scriptedMotorVelocity(0.0f),
|
||||||
_scriptedMotorTimescale(DEFAULT_SCRIPTED_MOTOR_TIMESCALE),
|
_scriptedMotorTimescale(DEFAULT_SCRIPTED_MOTOR_TIMESCALE),
|
||||||
_scriptedMotorFrame(SCRIPTED_MOTOR_CAMERA_FRAME),
|
_scriptedMotorFrame(SCRIPTED_MOTOR_CAMERA_FRAME),
|
||||||
|
@ -1168,7 +1168,7 @@ controller::Pose MyAvatar::getRightHandControllerPoseInAvatarFrame() const {
|
||||||
void MyAvatar::updateMotors() {
|
void MyAvatar::updateMotors() {
|
||||||
_characterController.clearMotors();
|
_characterController.clearMotors();
|
||||||
glm::quat motorRotation;
|
glm::quat motorRotation;
|
||||||
if (_motionBehaviors & AVATAR_MOTION_KEYBOARD_MOTOR_ENABLED) {
|
if (_motionBehaviors & AVATAR_MOTION_ACTION_MOTOR_ENABLED) {
|
||||||
if (_characterController.getState() == CharacterController::State::Hover) {
|
if (_characterController.getState() == CharacterController::State::Hover) {
|
||||||
motorRotation = getHead()->getCameraOrientation();
|
motorRotation = getHead()->getCameraOrientation();
|
||||||
} else {
|
} else {
|
||||||
|
@ -1178,11 +1178,11 @@ void MyAvatar::updateMotors() {
|
||||||
const float DEFAULT_MOTOR_TIMESCALE = 0.2f;
|
const float DEFAULT_MOTOR_TIMESCALE = 0.2f;
|
||||||
const float INVALID_MOTOR_TIMESCALE = 1.0e6f;
|
const float INVALID_MOTOR_TIMESCALE = 1.0e6f;
|
||||||
if (_isPushing || _isBraking || !_isBeingPushed) {
|
if (_isPushing || _isBraking || !_isBeingPushed) {
|
||||||
_characterController.addMotor(_keyboardMotorVelocity, motorRotation, DEFAULT_MOTOR_TIMESCALE, INVALID_MOTOR_TIMESCALE);
|
_characterController.addMotor(_actionMotorVelocity, motorRotation, DEFAULT_MOTOR_TIMESCALE, INVALID_MOTOR_TIMESCALE);
|
||||||
} else {
|
} else {
|
||||||
// _isBeingPushed must be true --> disable keyboard motor by giving it a long timescale,
|
// _isBeingPushed must be true --> disable action motor by giving it a long timescale,
|
||||||
// otherwise it's attempt to "stand in in place" could defeat scripted motor/thrusts
|
// otherwise it's attempt to "stand in in place" could defeat scripted motor/thrusts
|
||||||
_characterController.addMotor(_keyboardMotorVelocity, motorRotation, INVALID_MOTOR_TIMESCALE);
|
_characterController.addMotor(_actionMotorVelocity, motorRotation, INVALID_MOTOR_TIMESCALE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (_motionBehaviors & AVATAR_MOTION_SCRIPTED_MOTOR_ENABLED) {
|
if (_motionBehaviors & AVATAR_MOTION_SCRIPTED_MOTOR_ENABLED) {
|
||||||
|
@ -1542,22 +1542,22 @@ void MyAvatar::updateOrientation(float deltaTime) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyAvatar::updateKeyboardMotor(float deltaTime) {
|
void MyAvatar::updateActionMotor(float deltaTime) {
|
||||||
bool thrustIsPushing = (glm::length2(_thrust) > EPSILON);
|
bool thrustIsPushing = (glm::length2(_thrust) > EPSILON);
|
||||||
bool scriptedMotorIsPushing = (_motionBehaviors & AVATAR_MOTION_SCRIPTED_MOTOR_ENABLED)
|
bool scriptedMotorIsPushing = (_motionBehaviors & AVATAR_MOTION_SCRIPTED_MOTOR_ENABLED)
|
||||||
&& _scriptedMotorTimescale < MAX_CHARACTER_MOTOR_TIMESCALE;
|
&& _scriptedMotorTimescale < MAX_CHARACTER_MOTOR_TIMESCALE;
|
||||||
_isBeingPushed = thrustIsPushing || scriptedMotorIsPushing;
|
_isBeingPushed = thrustIsPushing || scriptedMotorIsPushing;
|
||||||
if (_isPushing || _isBeingPushed) {
|
if (_isPushing || _isBeingPushed) {
|
||||||
// we don't want the keyboard to brake if a script is pushing the avatar around
|
// we don't want the motor to brake if a script is pushing the avatar around
|
||||||
// (we assume the avatar is driving itself via script)
|
// (we assume the avatar is driving itself via script)
|
||||||
_isBraking = false;
|
_isBraking = false;
|
||||||
} else {
|
} else {
|
||||||
float speed = glm::length(_keyboardMotorVelocity);
|
float speed = glm::length(_actionMotorVelocity);
|
||||||
const float MIN_KEYBOARD_BRAKE_SPEED = 0.1f;
|
const float MIN_ACTION_BRAKE_SPEED = 0.1f;
|
||||||
_isBraking = _wasPushing || (_isBraking && speed > MIN_KEYBOARD_BRAKE_SPEED);
|
_isBraking = _wasPushing || (_isBraking && speed > MIN_ACTION_BRAKE_SPEED);
|
||||||
}
|
}
|
||||||
|
|
||||||
// compute keyboard input
|
// compute action input
|
||||||
glm::vec3 front = (_driveKeys[TRANSLATE_Z]) * IDENTITY_FRONT;
|
glm::vec3 front = (_driveKeys[TRANSLATE_Z]) * IDENTITY_FRONT;
|
||||||
glm::vec3 right = (_driveKeys[TRANSLATE_X]) * IDENTITY_RIGHT;
|
glm::vec3 right = (_driveKeys[TRANSLATE_X]) * IDENTITY_RIGHT;
|
||||||
|
|
||||||
|
@ -1582,8 +1582,8 @@ void MyAvatar::updateKeyboardMotor(float deltaTime) {
|
||||||
|
|
||||||
if (state == CharacterController::State::Hover) {
|
if (state == CharacterController::State::Hover) {
|
||||||
// we're flying --> complex acceleration curve that builds on top of current motor speed and caps at some max speed
|
// we're flying --> complex acceleration curve that builds on top of current motor speed and caps at some max speed
|
||||||
float motorSpeed = glm::length(_keyboardMotorVelocity);
|
float motorSpeed = glm::length(_actionMotorVelocity);
|
||||||
float finalMaxMotorSpeed = getUniformScale() * MAX_KEYBOARD_MOTOR_SPEED;
|
float finalMaxMotorSpeed = getUniformScale() * MAX_ACTION_MOTOR_SPEED;
|
||||||
float speedGrowthTimescale = 2.0f;
|
float speedGrowthTimescale = 2.0f;
|
||||||
float speedIncreaseFactor = 1.8f;
|
float speedIncreaseFactor = 1.8f;
|
||||||
motorSpeed *= 1.0f + glm::clamp(deltaTime / speedGrowthTimescale , 0.0f, 1.0f) * speedIncreaseFactor;
|
motorSpeed *= 1.0f + glm::clamp(deltaTime / speedGrowthTimescale , 0.0f, 1.0f) * speedIncreaseFactor;
|
||||||
|
@ -1591,17 +1591,17 @@ void MyAvatar::updateKeyboardMotor(float deltaTime) {
|
||||||
|
|
||||||
if (_isPushing) {
|
if (_isPushing) {
|
||||||
if (motorSpeed < maxBoostSpeed) {
|
if (motorSpeed < maxBoostSpeed) {
|
||||||
// an active keyboard motor should never be slower than this
|
// an active action motor should never be slower than this
|
||||||
float boostCoefficient = (maxBoostSpeed - motorSpeed) / maxBoostSpeed;
|
float boostCoefficient = (maxBoostSpeed - motorSpeed) / maxBoostSpeed;
|
||||||
motorSpeed += MIN_AVATAR_SPEED * boostCoefficient;
|
motorSpeed += MIN_AVATAR_SPEED * boostCoefficient;
|
||||||
} else if (motorSpeed > finalMaxMotorSpeed) {
|
} else if (motorSpeed > finalMaxMotorSpeed) {
|
||||||
motorSpeed = finalMaxMotorSpeed;
|
motorSpeed = finalMaxMotorSpeed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_keyboardMotorVelocity = motorSpeed * direction;
|
_actionMotorVelocity = motorSpeed * direction;
|
||||||
} else {
|
} else {
|
||||||
// we're interacting with a floor --> simple horizontal speed and exponential decay
|
// we're interacting with a floor --> simple horizontal speed and exponential decay
|
||||||
_keyboardMotorVelocity = MAX_WALKING_SPEED * direction;
|
_actionMotorVelocity = MAX_WALKING_SPEED * direction;
|
||||||
}
|
}
|
||||||
|
|
||||||
float boomChange = _driveKeys[ZOOM];
|
float boomChange = _driveKeys[ZOOM];
|
||||||
|
@ -1610,8 +1610,8 @@ void MyAvatar::updateKeyboardMotor(float deltaTime) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyAvatar::updatePosition(float deltaTime) {
|
void MyAvatar::updatePosition(float deltaTime) {
|
||||||
if (_motionBehaviors & AVATAR_MOTION_KEYBOARD_MOTOR_ENABLED) {
|
if (_motionBehaviors & AVATAR_MOTION_ACTION_MOTOR_ENABLED) {
|
||||||
updateKeyboardMotor(deltaTime);
|
updateActionMotor(deltaTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec3 velocity = getVelocity();
|
vec3 velocity = getVelocity();
|
||||||
|
@ -1779,10 +1779,10 @@ void MyAvatar::updateMotionBehaviorFromMenu() {
|
||||||
}
|
}
|
||||||
|
|
||||||
Menu* menu = Menu::getInstance();
|
Menu* menu = Menu::getInstance();
|
||||||
if (menu->isOptionChecked(MenuOption::KeyboardMotorControl)) {
|
if (menu->isOptionChecked(MenuOption::ActionMotorControl)) {
|
||||||
_motionBehaviors |= AVATAR_MOTION_KEYBOARD_MOTOR_ENABLED;
|
_motionBehaviors |= AVATAR_MOTION_ACTION_MOTOR_ENABLED;
|
||||||
} else {
|
} else {
|
||||||
_motionBehaviors &= ~AVATAR_MOTION_KEYBOARD_MOTOR_ENABLED;
|
_motionBehaviors &= ~AVATAR_MOTION_ACTION_MOTOR_ENABLED;
|
||||||
}
|
}
|
||||||
if (menu->isOptionChecked(MenuOption::ScriptedMotorControl)) {
|
if (menu->isOptionChecked(MenuOption::ScriptedMotorControl)) {
|
||||||
_motionBehaviors |= AVATAR_MOTION_SCRIPTED_MOTOR_ENABLED;
|
_motionBehaviors |= AVATAR_MOTION_SCRIPTED_MOTOR_ENABLED;
|
||||||
|
|
|
@ -360,8 +360,8 @@ private:
|
||||||
|
|
||||||
glm::vec3 _thrust; // impulse accumulator for outside sources
|
glm::vec3 _thrust; // impulse accumulator for outside sources
|
||||||
|
|
||||||
glm::vec3 _keyboardMotorVelocity; // target local-frame velocity of avatar (keyboard)
|
glm::vec3 _actionMotorVelocity; // target local-frame velocity of avatar (default controller actions)
|
||||||
glm::vec3 _scriptedMotorVelocity; // target local-frame velocity of avatar (script)
|
glm::vec3 _scriptedMotorVelocity; // target local-frame velocity of avatar (analog script)
|
||||||
float _scriptedMotorTimescale; // timescale for avatar to achieve its target velocity
|
float _scriptedMotorTimescale; // timescale for avatar to achieve its target velocity
|
||||||
int _scriptedMotorFrame;
|
int _scriptedMotorFrame;
|
||||||
quint32 _motionBehaviors;
|
quint32 _motionBehaviors;
|
||||||
|
@ -385,7 +385,7 @@ private:
|
||||||
|
|
||||||
// private methods
|
// private methods
|
||||||
void updateOrientation(float deltaTime);
|
void updateOrientation(float deltaTime);
|
||||||
void updateKeyboardMotor(float deltaTime);
|
void updateActionMotor(float deltaTime);
|
||||||
void updatePosition(float deltaTime);
|
void updatePosition(float deltaTime);
|
||||||
void updateCollisionSound(const glm::vec3& penetration, float deltaTime, float frequency);
|
void updateCollisionSound(const glm::vec3& penetration, float deltaTime, float frequency);
|
||||||
void initHeadBones();
|
void initHeadBones();
|
||||||
|
|
|
@ -65,11 +65,11 @@ using AvatarHash = QHash<QUuid, AvatarSharedPointer>;
|
||||||
using AvatarDataSequenceNumber = uint16_t;
|
using AvatarDataSequenceNumber = uint16_t;
|
||||||
|
|
||||||
// avatar motion behaviors
|
// avatar motion behaviors
|
||||||
const quint32 AVATAR_MOTION_KEYBOARD_MOTOR_ENABLED = 1U << 0;
|
const quint32 AVATAR_MOTION_ACTION_MOTOR_ENABLED = 1U << 0;
|
||||||
const quint32 AVATAR_MOTION_SCRIPTED_MOTOR_ENABLED = 1U << 1;
|
const quint32 AVATAR_MOTION_SCRIPTED_MOTOR_ENABLED = 1U << 1;
|
||||||
|
|
||||||
const quint32 AVATAR_MOTION_DEFAULTS =
|
const quint32 AVATAR_MOTION_DEFAULTS =
|
||||||
AVATAR_MOTION_KEYBOARD_MOTOR_ENABLED |
|
AVATAR_MOTION_ACTION_MOTOR_ENABLED |
|
||||||
AVATAR_MOTION_SCRIPTED_MOTOR_ENABLED;
|
AVATAR_MOTION_SCRIPTED_MOTOR_ENABLED;
|
||||||
|
|
||||||
// these bits will be expanded as features are exposed
|
// these bits will be expanded as features are exposed
|
||||||
|
|
Loading…
Reference in a new issue