Fix sprint mode scalar.

This commit is contained in:
r3tk0n 2019-04-03 11:42:40 -07:00
parent ec37ad7dc6
commit ac2971894b
2 changed files with 59 additions and 56 deletions

View file

@ -3359,38 +3359,47 @@ glm::vec3 MyAvatar::scaleMotorSpeed(const glm::vec3 forward, const glm::vec3 rig
auto zSpeed = getDriveKey(TRANSLATE_Z);
auto xSpeed = getDriveKey(TRANSLATE_X);
glm::vec3 direction;
switch(_controlSchemeIndex) {
case CONTROLS_DEFAULT:
// No acceleration curve for this one, constant speed.
if (zSpeed || xSpeed) {
direction = (zSpeed * forward) + (xSpeed * right);
// Normalize direction.
direction /= glm::length(direction);
return getSensorToWorldScale() * direction * getSprintSpeed();
} else {
return Vectors::ZERO;
if (qApp->isHMDMode()) {
switch(_controlSchemeIndex) {
case CONTROLS_DEFAULT:
// No acceleration curve for this one, constant speed.
if (zSpeed || xSpeed) {
direction = (zSpeed * forward) + (xSpeed * right);
// Normalize direction.
auto length = glm::length(direction);
if (length > EPSILON) {
direction /= length;
}
return getSensorToWorldScale() * direction * getSprintSpeed() * _walkSpeedScalar;
} else {
return Vectors::ZERO;
}
case CONTROLS_ANALOG:
if (zSpeed || xSpeed) {
glm::vec3 scaledForward = getSensorToWorldScale() * calculateGearedSpeed(zSpeed) * _walkSpeedScalar * ((zSpeed >= stickFullOn) ? getSprintSpeed() : getWalkSpeed()) * forward;
glm::vec3 scaledRight = getSensorToWorldScale() * calculateGearedSpeed(xSpeed) * _walkSpeedScalar * ((xSpeed > stickFullOn) ? getSprintSpeed() : getWalkSpeed()) * right;
direction = scaledForward + scaledRight;
return direction;
} else {
return Vectors::ZERO;
}
case CONTROLS_ANALOG_PLUS:
if (zSpeed || xSpeed) {
glm::vec3 scaledForward = getSensorToWorldScale() * calculateGearedSpeed(zSpeed) * _walkSpeedScalar * ((zSpeed >= stickFullOn) ? getSprintSpeed() : getWalkSpeed()) * forward;
glm::vec3 scaledRight = getSensorToWorldScale() * calculateGearedSpeed(xSpeed) * _walkSpeedScalar * ((xSpeed > stickFullOn) ? getSprintSpeed() : getWalkSpeed()) * right;
direction = scaledForward + scaledRight;
return direction;
} else {
return Vectors::ZERO;
}
default:
qDebug() << "Invalid control scheme index.";
return Vectors::ZERO;
}
case CONTROLS_ANALOG:
if (zSpeed || xSpeed) {
glm::vec3 scaledForward = getSensorToWorldScale() * calculateGearedSpeed(zSpeed) * ((zSpeed >= stickFullOn) ? getSprintSpeed() : getWalkSpeed()) * forward;
glm::vec3 scaledRight = getSensorToWorldScale() * calculateGearedSpeed(xSpeed) * ((xSpeed > stickFullOn) ? getSprintSpeed() : getWalkSpeed()) * right;
direction = scaledForward + scaledRight;
return direction;
} else {
return Vectors::ZERO;
}
case CONTROLS_ANALOG_PLUS:
if (zSpeed || xSpeed) {
glm::vec3 scaledForward = getSensorToWorldScale() * calculateGearedSpeed(zSpeed) * ((zSpeed >= stickFullOn) ? getSprintSpeed() : getWalkSpeed()) * forward;
glm::vec3 scaledRight = getSensorToWorldScale() * calculateGearedSpeed(xSpeed) * ((xSpeed > stickFullOn) ? getSprintSpeed() : getWalkSpeed()) * right;
direction = scaledForward + scaledRight;
return direction;
} else {
return Vectors::ZERO;
}
default:
qDebug() << "Invalid control scheme index.";
return Vectors::ZERO;
} else {
// Desktop mode.
direction = (zSpeed * forward) + (xSpeed * right);
direction *= getWalkSpeed() * _walkSpeedScalar;
}
}
@ -3412,9 +3421,17 @@ glm::vec3 MyAvatar::calculateScaledDirection(){
break;
case MOVEMENT_HAND_RELATIVE_LEVELED:
forward = (handRotation * controllerForward);
forward = glm::normalize(forward - (glm::dot(forward, Vectors::UNIT_Y) * Vectors::UNIT_Y));
if (glm::length(forward) > EPSILON) {
forward = glm::normalize(forward - (glm::dot(forward, Vectors::UNIT_Y) * Vectors::UNIT_Y));
} else {
forward = Vectors::ZERO;
}
right = (handRotation * controllerRight);
right = glm::normalize(right - (glm::dot(right, Vectors::UNIT_Y) * Vectors::UNIT_Y));
if (glm::length(right) > EPSILON) {
right = glm::normalize(right - (glm::dot(right, Vectors::UNIT_Y) * Vectors::UNIT_Y));
} else {
right = Vectors::ZERO;
}
break;
case MOVEMENT_HMD_RELATIVE:
default:
@ -3428,11 +3445,9 @@ glm::vec3 MyAvatar::calculateScaledDirection(){
glm::vec3 direction = scaleMotorSpeed(forward, right);
// RKNOTE: This may need to be changed later...
if (state == CharacterController::State::Hover ||
_characterController.computeCollisionMask() == BULLET_COLLISION_MASK_COLLISIONLESS) {
glm::vec3 up = (getDriveKey(TRANSLATE_Y)) * IDENTITY_UP;
//up /= glm::length(up);
direction += up;
}
@ -4752,24 +4767,24 @@ bool MyAvatar::getIsSitStandStateLocked() const {
float MyAvatar::getWalkSpeed() const {
switch(_controlSchemeIndex) {
case CONTROLS_ANALOG:
return _analogWalkSpeed.get() * _walkSpeedScalar;
return _analogWalkSpeed.get();
case CONTROLS_ANALOG_PLUS:
return _analogPlusWalkSpeed.get() * _walkSpeedScalar;
return _analogPlusWalkSpeed.get();
case CONTROLS_DEFAULT:
default:
return _defaultWalkSpeed.get() * _walkSpeedScalar;
return _defaultWalkSpeed.get();
}
}
float MyAvatar::getWalkBackwardSpeed() const {
switch(_controlSchemeIndex) {
case CONTROLS_ANALOG:
return _analogWalkBackwardSpeed.get() * _walkSpeedScalar;
return _analogWalkBackwardSpeed.get();
case CONTROLS_ANALOG_PLUS:
return _analogPlusWalkBackwardSpeed.get() * _walkSpeedScalar;
return _analogPlusWalkBackwardSpeed.get();
case CONTROLS_DEFAULT:
default:
return _defaultWalkBackwardSpeed.get() * _walkSpeedScalar;
return _defaultWalkBackwardSpeed.get();
}
}
@ -4778,19 +4793,7 @@ bool MyAvatar::isReadyForPhysics() const {
}
void MyAvatar::setSprintMode(bool sprint) {
float value = AVATAR_WALK_SPEED_SCALAR;
if (sprint) {
switch(_controlSchemeIndex) {
case CONTROLS_ANALOG:
value = _analogSprintSpeed.get() * _walkSpeedScalar;
case CONTROLS_ANALOG_PLUS:
value = _analogPlusSprintSpeed.get() * _walkSpeedScalar;
case CONTROLS_DEFAULT:
default:
value = _defaultSprintSpeed.get() * _walkSpeedScalar;
}
}
_walkSpeedScalar = value;
_walkSpeedScalar = sprint ? AVATAR_SPRINT_SPEED_SCALAR : AVATAR_WALK_SPEED_SCALAR;
}
void MyAvatar::setIsInWalkingState(bool isWalking) {

View file

@ -69,7 +69,7 @@ const glm::quat DEFAULT_AVATAR_RIGHTFOOT_ROT { -0.4016716778278351f, 0.915461599
const float DEFAULT_AVATAR_MAX_WALKING_SPEED = 2.6f; // meters / second
const float DEFAULT_AVATAR_MAX_WALKING_BACKWARD_SPEED = 2.2f; // meters / second
const float DEFAULT_AVATAR_MAX_FLYING_SPEED = 30.0f; // meters / second
const float DEFAULT_AVATAR_MAX_SPRINT_SPEED = 3.0f; // meters / second
const float DEFAULT_AVATAR_MAX_SPRINT_SPEED = 3.4f; // meters / second
const float DEFAULT_AVATAR_WALK_SPEED_THRESHOLD = 0.15f; // meters / second
const float ANALOG_AVATAR_MAX_WALKING_SPEED = 6.0f; // meters / second
@ -102,6 +102,6 @@ static const float MAX_AVATAR_HEIGHT = 1000.0f * DEFAULT_AVATAR_HEIGHT; // meter
static const float MIN_AVATAR_HEIGHT = 0.005f * DEFAULT_AVATAR_HEIGHT; // meters
static const float MIN_AVATAR_RADIUS = 0.5f * MIN_AVATAR_HEIGHT;
static const float AVATAR_WALK_SPEED_SCALAR = 1.0f;
static const float AVATAR_SPRINT_SPEED_SCALAR = 3.0f;
static const float AVATAR_SPRINT_SPEED_SCALAR = 2.0f;
#endif // hifi_AvatarConstants_h