mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 13:28:09 +02:00
Merge pull request #4573 from AndrewMeadows/bispinor
fix for avatar unable to jump into hover on mac
This commit is contained in:
commit
91b38785ea
4 changed files with 24 additions and 10 deletions
|
@ -970,9 +970,6 @@ void Application::keyPressEvent(QKeyEvent* event) {
|
||||||
|
|
||||||
case Qt::Key_E:
|
case Qt::Key_E:
|
||||||
case Qt::Key_PageUp:
|
case Qt::Key_PageUp:
|
||||||
if (!_myAvatar->getDriveKeys(UP)) {
|
|
||||||
_myAvatar->jump();
|
|
||||||
}
|
|
||||||
_myAvatar->setDriveKeys(UP, 1.0f);
|
_myAvatar->setDriveKeys(UP, 1.0f);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -2207,6 +2204,7 @@ void Application::update(float deltaTime) {
|
||||||
|
|
||||||
{
|
{
|
||||||
PerformanceTimer perfTimer("physics");
|
PerformanceTimer perfTimer("physics");
|
||||||
|
_myAvatar->relayDriveKeysToCharacterController();
|
||||||
_physicsEngine.stepSimulation();
|
_physicsEngine.stepSimulation();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1452,3 +1452,9 @@ void MyAvatar::clearDriveKeys() {
|
||||||
_driveKeys[i] = 0.0f;
|
_driveKeys[i] = 0.0f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MyAvatar::relayDriveKeysToCharacterController() {
|
||||||
|
if (_driveKeys[UP] > 0.0f) {
|
||||||
|
_characterController.jump();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -87,7 +87,8 @@ public:
|
||||||
void clearDriveKeys();
|
void clearDriveKeys();
|
||||||
void setDriveKeys(int key, float val) { _driveKeys[key] = val; };
|
void setDriveKeys(int key, float val) { _driveKeys[key] = val; };
|
||||||
bool getDriveKeys(int key) { return _driveKeys[key] != 0.0f; };
|
bool getDriveKeys(int key) { return _driveKeys[key] != 0.0f; };
|
||||||
void jump() { _characterController.jump(); }
|
|
||||||
|
void relayDriveKeysToCharacterController();
|
||||||
|
|
||||||
bool isMyAvatar() { return true; }
|
bool isMyAvatar() { return true; }
|
||||||
|
|
||||||
|
|
|
@ -214,7 +214,7 @@ btVector3 CharacterController::perpindicularComponent(const btVector3& direction
|
||||||
const btVector3 LOCAL_UP_AXIS(0.0f, 1.0f, 0.0f);
|
const btVector3 LOCAL_UP_AXIS(0.0f, 1.0f, 0.0f);
|
||||||
const float DEFAULT_GRAVITY = 5.0f;
|
const float DEFAULT_GRAVITY = 5.0f;
|
||||||
const float TERMINAL_VELOCITY = 55.0f;
|
const float TERMINAL_VELOCITY = 55.0f;
|
||||||
const float JUMP_SPEED = 5.0f;
|
const float JUMP_SPEED = 3.5f;
|
||||||
|
|
||||||
CharacterController::CharacterController(AvatarData* avatarData) {
|
CharacterController::CharacterController(AvatarData* avatarData) {
|
||||||
assert(avatarData);
|
assert(avatarData);
|
||||||
|
@ -229,8 +229,8 @@ CharacterController::CharacterController(AvatarData* avatarData) {
|
||||||
_velocityTimeInterval = 0.0f;
|
_velocityTimeInterval = 0.0f;
|
||||||
_verticalVelocity = 0.0f;
|
_verticalVelocity = 0.0f;
|
||||||
_verticalOffset = 0.0f;
|
_verticalOffset = 0.0f;
|
||||||
_gravity = DEFAULT_GRAVITY; // slower than Earth's
|
_gravity = DEFAULT_GRAVITY;
|
||||||
_maxFallSpeed = TERMINAL_VELOCITY; // Terminal velocity of a sky diver in m/s.
|
_maxFallSpeed = TERMINAL_VELOCITY;
|
||||||
_jumpSpeed = JUMP_SPEED;
|
_jumpSpeed = JUMP_SPEED;
|
||||||
_isOnGround = false;
|
_isOnGround = false;
|
||||||
_isJumping = false;
|
_isJumping = false;
|
||||||
|
@ -529,6 +529,7 @@ void CharacterController::stepDown(btCollisionWorld* collisionWorld, btScalar dt
|
||||||
_verticalVelocity = 0.0f;
|
_verticalVelocity = 0.0f;
|
||||||
_verticalOffset = 0.0f;
|
_verticalOffset = 0.0f;
|
||||||
_isJumping = false;
|
_isJumping = false;
|
||||||
|
_isHovering = false;
|
||||||
_isOnGround = true;
|
_isOnGround = true;
|
||||||
} else if (!_isJumping) {
|
} else if (!_isJumping) {
|
||||||
// sweep again for floor within downStep threshold
|
// sweep again for floor within downStep threshold
|
||||||
|
@ -555,6 +556,7 @@ void CharacterController::stepDown(btCollisionWorld* collisionWorld, btScalar dt
|
||||||
_verticalVelocity = 0.0f;
|
_verticalVelocity = 0.0f;
|
||||||
_verticalOffset = 0.0f;
|
_verticalOffset = 0.0f;
|
||||||
_isJumping = false;
|
_isJumping = false;
|
||||||
|
_isHovering = false;
|
||||||
_isOnGround = true;
|
_isOnGround = true;
|
||||||
} else {
|
} else {
|
||||||
// nothing to step down on
|
// nothing to step down on
|
||||||
|
@ -583,6 +585,7 @@ void CharacterController::reset(btCollisionWorld* collisionWorld) {
|
||||||
_verticalOffset = 0.0;
|
_verticalOffset = 0.0;
|
||||||
_isOnGround = false;
|
_isOnGround = false;
|
||||||
_isJumping = false;
|
_isJumping = false;
|
||||||
|
_isHovering = true;
|
||||||
_walkDirection.setValue(0,0,0);
|
_walkDirection.setValue(0,0,0);
|
||||||
_velocityTimeInterval = 0.0;
|
_velocityTimeInterval = 0.0;
|
||||||
|
|
||||||
|
@ -630,8 +633,13 @@ void CharacterController::playerStep(btCollisionWorld* collisionWorld, btScalar
|
||||||
|
|
||||||
// Update fall velocity.
|
// Update fall velocity.
|
||||||
if (_isHovering) {
|
if (_isHovering) {
|
||||||
const btScalar HOVER_RELAXATION_TIMESCALE = 1.0f;
|
const btScalar MIN_HOVER_VERTICAL_VELOCITY = 0.1f;
|
||||||
|
if (fabsf(_verticalVelocity) < MIN_HOVER_VERTICAL_VELOCITY) {
|
||||||
|
_verticalVelocity = 0.0f;
|
||||||
|
} else {
|
||||||
|
const btScalar HOVER_RELAXATION_TIMESCALE = 0.8f;
|
||||||
_verticalVelocity *= (1.0f - dt / HOVER_RELAXATION_TIMESCALE);
|
_verticalVelocity *= (1.0f - dt / HOVER_RELAXATION_TIMESCALE);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
_verticalVelocity -= _gravity * dt;
|
_verticalVelocity -= _gravity * dt;
|
||||||
if (_verticalVelocity > _jumpSpeed) {
|
if (_verticalVelocity > _jumpSpeed) {
|
||||||
|
@ -696,7 +704,7 @@ void CharacterController::jump() {
|
||||||
} else {
|
} else {
|
||||||
quint64 now = usecTimestampNow();
|
quint64 now = usecTimestampNow();
|
||||||
const quint64 JUMP_TO_HOVER_PERIOD = USECS_PER_SECOND;
|
const quint64 JUMP_TO_HOVER_PERIOD = USECS_PER_SECOND;
|
||||||
if (now - _jumpToHoverStart < JUMP_TO_HOVER_PERIOD) {
|
if (now - _jumpToHoverStart > JUMP_TO_HOVER_PERIOD) {
|
||||||
_isHovering = true;
|
_isHovering = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -781,6 +789,7 @@ void CharacterController::setEnabled(bool enabled) {
|
||||||
// Setting the ADD bit here works for all cases so we don't even bother checking other bits.
|
// Setting the ADD bit here works for all cases so we don't even bother checking other bits.
|
||||||
_pendingFlags |= PENDING_FLAG_ADD_TO_SIMULATION;
|
_pendingFlags |= PENDING_FLAG_ADD_TO_SIMULATION;
|
||||||
_isHovering = true;
|
_isHovering = true;
|
||||||
|
_verticalVelocity = 0.0f;
|
||||||
} else {
|
} else {
|
||||||
if (_dynamicsWorld) {
|
if (_dynamicsWorld) {
|
||||||
_pendingFlags |= PENDING_FLAG_REMOVE_FROM_SIMULATION;
|
_pendingFlags |= PENDING_FLAG_REMOVE_FROM_SIMULATION;
|
||||||
|
|
Loading…
Reference in a new issue