mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-04 14:43:12 +02:00
Update gearing system.
This commit is contained in:
parent
2077e012db
commit
cbd841a14d
3 changed files with 81 additions and 14 deletions
|
@ -3312,6 +3312,27 @@ void MyAvatar::updateOrientation(float deltaTime) {
|
|||
// return scaledSpeed;
|
||||
//}
|
||||
|
||||
float MyAvatar::calculateGearedSpeed(const float driveKey) {
|
||||
if (driveKey > getDriveGear5()) {
|
||||
return 1.0f;
|
||||
}
|
||||
else if (driveKey > getDriveGear4()) {
|
||||
return 0.8f;
|
||||
}
|
||||
else if (driveKey > getDriveGear3()) {
|
||||
return 0.6f;
|
||||
}
|
||||
else if (driveKey > getDriveGear2()) {
|
||||
return 0.4f;
|
||||
}
|
||||
else if (driveKey > getDriveGear1()) {
|
||||
return 0.2f;
|
||||
}
|
||||
else {
|
||||
return 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
glm::vec3 MyAvatar::scaleMotorSpeed(const glm::vec3 forward, const glm::vec3 right) {
|
||||
float stickFullOn = 0.95f;
|
||||
auto zSpeed = getDriveKey(TRANSLATE_Z);
|
||||
|
@ -3330,8 +3351,8 @@ glm::vec3 MyAvatar::scaleMotorSpeed(const glm::vec3 forward, const glm::vec3 rig
|
|||
}
|
||||
case CONTROLS_ANALOG:
|
||||
if (zSpeed || xSpeed) {
|
||||
glm::vec3 scaledForward = getSensorToWorldScale() * zSpeed * ((zSpeed >= stickFullOn) ? getSprintSpeed() : getWalkSpeed()) * forward;
|
||||
glm::vec3 scaledRight = getSensorToWorldScale() * xSpeed * ((xSpeed > stickFullOn) ? getSprintSpeed() : getWalkSpeed()) * right;
|
||||
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 {
|
||||
|
@ -3339,8 +3360,8 @@ glm::vec3 MyAvatar::scaleMotorSpeed(const glm::vec3 forward, const glm::vec3 rig
|
|||
}
|
||||
case CONTROLS_ANALOG_PLUS:
|
||||
if (zSpeed || xSpeed) {
|
||||
glm::vec3 scaledForward = getSensorToWorldScale() * zSpeed * ((zSpeed >= stickFullOn) ? getSprintSpeed() : getWalkSpeed()) * forward;
|
||||
glm::vec3 scaledRight = getSensorToWorldScale() * xSpeed * ((xSpeed > stickFullOn) ? getSprintSpeed() : getWalkSpeed()) * right;
|
||||
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 {
|
||||
|
@ -3987,11 +4008,19 @@ void MyAvatar::setDriveGear1(float shiftPoint) {
|
|||
return;
|
||||
}
|
||||
if (shiftPoint > 1.0 || shiftPoint < 0) return;
|
||||
_driveGear1 = (shiftPoint <= _driveGear2) ? shiftPoint : _driveGear1;
|
||||
_driveGear1 = (shiftPoint < _driveGear2) ? shiftPoint : _driveGear1;
|
||||
}
|
||||
|
||||
float MyAvatar::getDriveGear1() {
|
||||
return _driveGear1;
|
||||
switch (_controlSchemeIndex) {
|
||||
case CONTROLS_ANALOG:
|
||||
return ANALOG_AVATAR_GEAR_1;
|
||||
case CONTROLS_ANALOG_PLUS:
|
||||
return _driveGear1;
|
||||
case CONTROLS_DEFAULT:
|
||||
default:
|
||||
return 1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void MyAvatar::setDriveGear2(float shiftPoint) {
|
||||
|
@ -4000,11 +4029,19 @@ void MyAvatar::setDriveGear2(float shiftPoint) {
|
|||
return;
|
||||
}
|
||||
if (shiftPoint > 1.0 || shiftPoint < 0) return;
|
||||
_driveGear2 = (shiftPoint <= _driveGear3 && shiftPoint >= _driveGear1) ? shiftPoint : _driveGear2;
|
||||
_driveGear2 = (shiftPoint < _driveGear3 && shiftPoint >= _driveGear1) ? shiftPoint : _driveGear2;
|
||||
}
|
||||
|
||||
float MyAvatar::getDriveGear2() {
|
||||
return _driveGear2;
|
||||
switch (_controlSchemeIndex) {
|
||||
case CONTROLS_ANALOG:
|
||||
return ANALOG_AVATAR_GEAR_2;
|
||||
case CONTROLS_ANALOG_PLUS:
|
||||
return _driveGear2;
|
||||
case CONTROLS_DEFAULT:
|
||||
default:
|
||||
return 1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void MyAvatar::setDriveGear3(float shiftPoint) {
|
||||
|
@ -4013,11 +4050,19 @@ void MyAvatar::setDriveGear3(float shiftPoint) {
|
|||
return;
|
||||
}
|
||||
if (shiftPoint > 1.0 || shiftPoint < 0) return;
|
||||
_driveGear3 = (shiftPoint <= _driveGear4 && shiftPoint >= _driveGear2) ? shiftPoint : _driveGear3;
|
||||
_driveGear3 = (shiftPoint < _driveGear4 && shiftPoint >= _driveGear2) ? shiftPoint : _driveGear3;
|
||||
}
|
||||
|
||||
float MyAvatar::getDriveGear3() {
|
||||
return _driveGear3;
|
||||
switch (_controlSchemeIndex) {
|
||||
case CONTROLS_ANALOG:
|
||||
return ANALOG_AVATAR_GEAR_3;
|
||||
case CONTROLS_ANALOG_PLUS:
|
||||
return _driveGear3;
|
||||
case CONTROLS_DEFAULT:
|
||||
default:
|
||||
return 1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void MyAvatar::setDriveGear4(float shiftPoint) {
|
||||
|
@ -4026,11 +4071,19 @@ void MyAvatar::setDriveGear4(float shiftPoint) {
|
|||
return;
|
||||
}
|
||||
if (shiftPoint > 1.0 || shiftPoint < 0) return;
|
||||
_driveGear4 = (shiftPoint <= _driveGear5 && shiftPoint >= _driveGear3) ? shiftPoint : _driveGear4;
|
||||
_driveGear4 = (shiftPoint < _driveGear5 && shiftPoint >= _driveGear3) ? shiftPoint : _driveGear4;
|
||||
}
|
||||
|
||||
float MyAvatar::getDriveGear4() {
|
||||
return _driveGear4;
|
||||
switch (_controlSchemeIndex) {
|
||||
case CONTROLS_ANALOG:
|
||||
return ANALOG_AVATAR_GEAR_4;
|
||||
case CONTROLS_ANALOG_PLUS:
|
||||
return _driveGear4;
|
||||
case CONTROLS_DEFAULT:
|
||||
default:
|
||||
return 1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void MyAvatar::setDriveGear5(float shiftPoint) {
|
||||
|
@ -4039,11 +4092,19 @@ void MyAvatar::setDriveGear5(float shiftPoint) {
|
|||
return;
|
||||
}
|
||||
if (shiftPoint > 1.0 || shiftPoint < 0) return;
|
||||
_driveGear5 = (shiftPoint >= _driveGear4) ? shiftPoint : _driveGear5;
|
||||
_driveGear5 = (shiftPoint > _driveGear4) ? shiftPoint : _driveGear5;
|
||||
}
|
||||
|
||||
float MyAvatar::getDriveGear5() {
|
||||
return _driveGear5;
|
||||
switch (_controlSchemeIndex) {
|
||||
case CONTROLS_ANALOG:
|
||||
return ANALOG_AVATAR_GEAR_5;
|
||||
case CONTROLS_ANALOG_PLUS:
|
||||
return _driveGear5;
|
||||
case CONTROLS_DEFAULT:
|
||||
default:
|
||||
return 1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
bool MyAvatar::getFlyingHMDPref() {
|
||||
|
|
|
@ -1877,6 +1877,7 @@ private:
|
|||
// private methods
|
||||
void updateOrientation(float deltaTime);
|
||||
glm::vec3 calculateScaledDirection();
|
||||
float calculateGearedSpeed(const float driveKey);
|
||||
glm::vec3 scaleMotorSpeed(const glm::vec3 forward, const glm::vec3 right);
|
||||
void updateActionMotor(float deltaTime);
|
||||
void updatePosition(float deltaTime);
|
||||
|
|
|
@ -76,6 +76,11 @@ const float ANALOG_AVATAR_MAX_WALKING_SPEED = 2.6f; // meters / second
|
|||
const float ANALOG_AVATAR_MAX_WALKING_BACKWARD_SPEED = 2.2f; // meters / second
|
||||
const float ANALOG_AVATAR_MAX_FLYING_SPEED = 30.0f; // meters / second
|
||||
const float ANALOG_AVATAR_MAX_SPRINT_SPEED = 3.0f; // meters / second
|
||||
const float ANALOG_AVATAR_GEAR_1 = 0.2f; // meters / second
|
||||
const float ANALOG_AVATAR_GEAR_2 = 0.4f; // meters / second
|
||||
const float ANALOG_AVATAR_GEAR_3 = 0.6f; // meters / second
|
||||
const float ANALOG_AVATAR_GEAR_4 = 0.8f; // meters / second
|
||||
const float ANALOG_AVATAR_GEAR_5 = 1.0f; // meters / second
|
||||
|
||||
const float ANALOG_PLUS_AVATAR_MAX_WALKING_SPEED = 3.3f; // meters / second
|
||||
const float ANALOG_PLUS_AVATAR_MAX_WALKING_BACKWARD_SPEED = 2.42f; // meters / second
|
||||
|
|
Loading…
Reference in a new issue