From 72ca62c4afdcbd07e5664d18e6a94ce82fda8bb1 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Thu, 14 Sep 2017 00:25:11 +0100 Subject: [PATCH 1/9] Initial Commit - more to do. --- interface/src/avatar/MyAvatar.cpp | 6 ++++++ interface/src/avatar/MyAvatar.h | 7 ++++++- libraries/physics/src/CharacterController.cpp | 8 +++++--- libraries/physics/src/CharacterController.h | 10 ++++++++-- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 8592ff3d74..d7fc56275d 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -60,6 +60,8 @@ #include "MovingEntitiesOperator.h" #include "SceneScriptingInterface.h" +#include "CharacterController.h" + using namespace std; const float DEFAULT_REAL_WORLD_FIELD_OF_VIEW_DEGREES = 30.0f; @@ -2259,6 +2261,10 @@ float MyAvatar::getDomainMaxScale() { return _domainMaximumScale; } +void MyAvatar::setGravity(float gravity) { + emit gravityChanged(gravity); +} + void MyAvatar::increaseSize() { // make sure we're starting from an allowable scale clampTargetScaleToDomainLimits(); diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 65dcc12e7d..dbdf8f82fb 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -145,7 +145,9 @@ class MyAvatar : public Avatar { Q_PROPERTY(bool hmdRollControlEnabled READ getHMDRollControlEnabled WRITE setHMDRollControlEnabled) Q_PROPERTY(float hmdRollControlDeadZone READ getHMDRollControlDeadZone WRITE setHMDRollControlDeadZone) Q_PROPERTY(float hmdRollControlRate READ getHMDRollControlRate WRITE setHMDRollControlRate) - + + Q_PROPERTY(float gravity WRITE updateGravity NOTIFY gravityChanged); + const QString DOMINANT_LEFT_HAND = "left"; const QString DOMINANT_RIGHT_HAND = "right"; @@ -540,6 +542,8 @@ public slots: float getDomainMinScale(); float getDomainMaxScale(); + void setGravity(float gravity); + void goToLocation(const glm::vec3& newPosition, bool hasOrientation = false, const glm::quat& newOrientation = glm::quat(), bool shouldFaceLocation = false); @@ -592,6 +596,7 @@ signals: void wentActive(); void skeletonChanged(); void dominantHandChanged(const QString& hand); + void gravityChanged(const float gravity); private: diff --git a/libraries/physics/src/CharacterController.cpp b/libraries/physics/src/CharacterController.cpp index 9a7abc4e98..36a4c75168 100755 --- a/libraries/physics/src/CharacterController.cpp +++ b/libraries/physics/src/CharacterController.cpp @@ -20,6 +20,7 @@ const btVector3 LOCAL_UP_AXIS(0.0f, 1.0f, 0.0f); const float JUMP_SPEED = 3.5f; const float MAX_FALL_HEIGHT = 20.0f; +const float DEFAULT_CHARACTER_GRAVITY = -5.0f; #ifdef DEBUG_STATE_CHANGE #define SET_STATE(desiredState, reason) setState(desiredState, reason) @@ -371,19 +372,20 @@ void CharacterController::setState(State desiredState) { } } -void CharacterController::updateGravity() { +void CharacterController::updateGravity(float gravity = DEFAULT_CHARACTER_GRAVITY) { int16_t collisionGroup = computeCollisionGroup(); if (_state == State::Hover || collisionGroup == BULLET_COLLISION_GROUP_COLLISIONLESS) { _gravity = 0.0f; } else { - const float DEFAULT_CHARACTER_GRAVITY = -5.0f; - _gravity = DEFAULT_CHARACTER_GRAVITY; + _gravity = gravity; } if (_rigidBody) { _rigidBody->setGravity(_gravity * _currentUp); } + emit gravityChanged(); } + void CharacterController::setLocalBoundingBox(const glm::vec3& minCorner, const glm::vec3& scale) { float x = scale.x; float z = scale.z; diff --git a/libraries/physics/src/CharacterController.h b/libraries/physics/src/CharacterController.h index bf84d318d4..f412e09956 100644 --- a/libraries/physics/src/CharacterController.h +++ b/libraries/physics/src/CharacterController.h @@ -42,10 +42,16 @@ const btScalar MAX_CHARACTER_MOTOR_TIMESCALE = 60.0f; // one minute const btScalar MIN_CHARACTER_MOTOR_TIMESCALE = 0.05f; class CharacterController : public btCharacterControllerInterface { + + Q_PROPERTY(float gravity WRITE updateGravity NOTIFY gravityChanged); + +signals: + void gravityChanged(); + public: CharacterController(); virtual ~CharacterController(); - + void updateGravity(float gravity); bool needsRemoval() const; bool needsAddition() const; virtual void setDynamicsWorld(btDynamicsWorld* world); @@ -130,7 +136,7 @@ protected: #endif virtual void updateMassProperties() = 0; - void updateGravity(); + void updateGravity(float gravity); void updateUpAxis(const glm::quat& rotation); bool checkForSupport(btCollisionWorld* collisionWorld); From c2e342ddac9cab175d124a2bb97cb2b1ff8ac1e5 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Fri, 15 Sep 2017 06:03:56 +0100 Subject: [PATCH 2/9] Gravity Implementation --- interface/src/avatar/MyAvatar.cpp | 6 ++- interface/src/avatar/MyAvatar.h | 4 +- libraries/physics/src/CharacterController.cpp | 37 +++++++++++-------- libraries/physics/src/CharacterController.h | 11 ++---- 4 files changed, 32 insertions(+), 26 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index d7fc56275d..ab48138822 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -2262,7 +2262,11 @@ float MyAvatar::getDomainMaxScale() { } void MyAvatar::setGravity(float gravity) { - emit gravityChanged(gravity); + _characterController.setGravity(gravity); +} + +float MyAvatar::getGravity() { + return _characterController.getGravity(); } void MyAvatar::increaseSize() { diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index dbdf8f82fb..724a313296 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -146,8 +146,6 @@ class MyAvatar : public Avatar { Q_PROPERTY(float hmdRollControlDeadZone READ getHMDRollControlDeadZone WRITE setHMDRollControlDeadZone) Q_PROPERTY(float hmdRollControlRate READ getHMDRollControlRate WRITE setHMDRollControlRate) - Q_PROPERTY(float gravity WRITE updateGravity NOTIFY gravityChanged); - const QString DOMINANT_LEFT_HAND = "left"; const QString DOMINANT_RIGHT_HAND = "right"; @@ -543,6 +541,7 @@ public slots: float getDomainMaxScale(); void setGravity(float gravity); + float getGravity(); void goToLocation(const glm::vec3& newPosition, bool hasOrientation = false, const glm::quat& newOrientation = glm::quat(), @@ -596,7 +595,6 @@ signals: void wentActive(); void skeletonChanged(); void dominantHandChanged(const QString& hand); - void gravityChanged(const float gravity); private: diff --git a/libraries/physics/src/CharacterController.cpp b/libraries/physics/src/CharacterController.cpp index 36a4c75168..a81e1d8624 100755 --- a/libraries/physics/src/CharacterController.cpp +++ b/libraries/physics/src/CharacterController.cpp @@ -20,7 +20,7 @@ const btVector3 LOCAL_UP_AXIS(0.0f, 1.0f, 0.0f); const float JUMP_SPEED = 3.5f; const float MAX_FALL_HEIGHT = 20.0f; -const float DEFAULT_CHARACTER_GRAVITY = -5.0f; +float DEFAULT_CHARACTER_GRAVITY = -5.0f; #ifdef DEBUG_STATE_CHANGE #define SET_STATE(desiredState, reason) setState(desiredState, reason) @@ -354,6 +354,27 @@ static const char* stateToStr(CharacterController::State state) { } #endif // #ifdef DEBUG_STATE_CHANGE +void CharacterController::updateGravity() { + int16_t collisionGroup = computeCollisionGroup(); + if (_state == State::Hover || collisionGroup == BULLET_COLLISION_GROUP_COLLISIONLESS) { + _gravity = 0.0f; + } else { + _gravity = DEFAULT_CHARACTER_GRAVITY; + } + if (_rigidBody) { + _rigidBody->setGravity(_gravity * _currentUp); + } +} + + +void CharacterController::setGravity(float gravity) { + DEFAULT_CHARACTER_GRAVITY = gravity; +} + +float CharacterController::getGravity() { + return DEFAULT_CHARACTER_GRAVITY; +} + #ifdef DEBUG_STATE_CHANGE void CharacterController::setState(State desiredState, const char* reason) { #else @@ -372,20 +393,6 @@ void CharacterController::setState(State desiredState) { } } -void CharacterController::updateGravity(float gravity = DEFAULT_CHARACTER_GRAVITY) { - int16_t collisionGroup = computeCollisionGroup(); - if (_state == State::Hover || collisionGroup == BULLET_COLLISION_GROUP_COLLISIONLESS) { - _gravity = 0.0f; - } else { - _gravity = gravity; - } - if (_rigidBody) { - _rigidBody->setGravity(_gravity * _currentUp); - } - emit gravityChanged(); -} - - void CharacterController::setLocalBoundingBox(const glm::vec3& minCorner, const glm::vec3& scale) { float x = scale.x; float z = scale.z; diff --git a/libraries/physics/src/CharacterController.h b/libraries/physics/src/CharacterController.h index f412e09956..b7ea17fc71 100644 --- a/libraries/physics/src/CharacterController.h +++ b/libraries/physics/src/CharacterController.h @@ -43,20 +43,17 @@ const btScalar MIN_CHARACTER_MOTOR_TIMESCALE = 0.05f; class CharacterController : public btCharacterControllerInterface { - Q_PROPERTY(float gravity WRITE updateGravity NOTIFY gravityChanged); - -signals: - void gravityChanged(); - public: CharacterController(); virtual ~CharacterController(); - void updateGravity(float gravity); bool needsRemoval() const; bool needsAddition() const; virtual void setDynamicsWorld(btDynamicsWorld* world); btCollisionObject* getCollisionObject() { return _rigidBody; } + void setGravity(float gravity); + float getGravity(); + virtual void updateShapeIfNecessary() = 0; // overrides from btCharacterControllerInterface @@ -136,7 +133,7 @@ protected: #endif virtual void updateMassProperties() = 0; - void updateGravity(float gravity); + void updateGravity(); void updateUpAxis(const glm::quat& rotation); bool checkForSupport(btCollisionWorld* collisionWorld); From e86b37f949122822d2711c296ff01f4ec31248af Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Fri, 15 Sep 2017 06:07:50 +0100 Subject: [PATCH 3/9] Added script for testing --- scripts/developer/tests/gravityScript.js | 47 ++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 scripts/developer/tests/gravityScript.js diff --git a/scripts/developer/tests/gravityScript.js b/scripts/developer/tests/gravityScript.js new file mode 100644 index 0000000000..9d3868c078 --- /dev/null +++ b/scripts/developer/tests/gravityScript.js @@ -0,0 +1,47 @@ +// +// Gravity Script 1.0 +// ************ +// +// Created by Cain Kilgore on 9/14/2017 + +// Javascript for the Gravity Modifier Implementation to test +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + + +function menuParameters(menuNameSelection, menuItemNameSelection) { + Menu.addMenuItem({ + menuName: menuNameSelection, + menuItemName: menuItemNameSelection, + isCheckable: false + }); +} + +function setupMenu() { + if(!Menu.menuExists("Gravity")) { + Menu.addMenu("Gravity"); + for(var i = -5; i <= 5; i++) { + menuParameters("Gravity", i); + } + } +} + +function menuItemEvent(menuItem) { + for(var i = -5; i <= 5; i++) { + if(menuItem == i) { + MyAvatar.setGravity(i); + } + } +} + +function onScriptEnding() { + Menu.removeMenu("Gravity"); +} + +setupMenu(); + +Menu.menuItemEvent.connect(menuItemEvent); + +Script.scriptEnding.connect(onScriptEnding); From 67a5c75a0d92ba4dc811924f6799d509c79483d5 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Fri, 15 Sep 2017 06:08:22 +0100 Subject: [PATCH 4/9] Doesn't need to be here anymore --- interface/src/avatar/MyAvatar.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index ab48138822..3a84ffd49f 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -60,8 +60,6 @@ #include "MovingEntitiesOperator.h" #include "SceneScriptingInterface.h" -#include "CharacterController.h" - using namespace std; const float DEFAULT_REAL_WORLD_FIELD_OF_VIEW_DEGREES = 30.0f; From 794f3ca69ffc812ad3829998c2f77dcbc105cdb6 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Fri, 15 Sep 2017 06:09:03 +0100 Subject: [PATCH 5/9] Indentation --- scripts/developer/tests/gravityScript.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/scripts/developer/tests/gravityScript.js b/scripts/developer/tests/gravityScript.js index 9d3868c078..3468de72c3 100644 --- a/scripts/developer/tests/gravityScript.js +++ b/scripts/developer/tests/gravityScript.js @@ -20,17 +20,17 @@ function menuParameters(menuNameSelection, menuItemNameSelection) { } function setupMenu() { - if(!Menu.menuExists("Gravity")) { + if (!Menu.menuExists("Gravity")) { Menu.addMenu("Gravity"); - for(var i = -5; i <= 5; i++) { + for (var i = -5; i <= 5; i++) { menuParameters("Gravity", i); } } } function menuItemEvent(menuItem) { - for(var i = -5; i <= 5; i++) { - if(menuItem == i) { + for (var i = -5; i <= 5; i++) { + if (menuItem == i) { MyAvatar.setGravity(i); } } @@ -41,7 +41,5 @@ function onScriptEnding() { } setupMenu(); - Menu.menuItemEvent.connect(menuItemEvent); - Script.scriptEnding.connect(onScriptEnding); From 4d904bd5ce7d7b1a805c2f8fbdda630afc27576f Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Wed, 20 Sep 2017 18:43:16 +0100 Subject: [PATCH 6/9] Changed naming of avatarGrav --- libraries/physics/src/CharacterController.cpp | 21 +++++-------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/libraries/physics/src/CharacterController.cpp b/libraries/physics/src/CharacterController.cpp index 0dcc0bcbe8..6c78b46b48 100755 --- a/libraries/physics/src/CharacterController.cpp +++ b/libraries/physics/src/CharacterController.cpp @@ -21,7 +21,8 @@ const btVector3 LOCAL_UP_AXIS(0.0f, 1.0f, 0.0f); const float JUMP_SPEED = 3.5f; const float MAX_FALL_HEIGHT = 20.0f; -float DEFAULT_CHARACTER_GRAVITY = -5.0f; +const float DEFAULT_CHARACTER_GRAVITY = -5.0f; +float currentAvatarGravity = DEFAULT_CHARACTER_GRAVITY; #ifdef DEBUG_STATE_CHANGE #define SET_STATE(desiredState, reason) setState(desiredState, reason) @@ -359,7 +360,7 @@ void CharacterController::updateGravity() { if (_state == State::Hover || collisionGroup == BULLET_COLLISION_GROUP_COLLISIONLESS) { _gravity = 0.0f; } else { - _gravity = DEFAULT_CHARACTER_GRAVITY; + _gravity = currentAvatarGravity; } if (_rigidBody) { _rigidBody->setGravity(_gravity * _currentUp); @@ -368,11 +369,11 @@ void CharacterController::updateGravity() { void CharacterController::setGravity(float gravity) { - DEFAULT_CHARACTER_GRAVITY = gravity; + currentAvatarGravity = gravity; } float CharacterController::getGravity() { - return DEFAULT_CHARACTER_GRAVITY; + return currentAvatarGravity; } #ifdef DEBUG_STATE_CHANGE @@ -393,18 +394,6 @@ void CharacterController::setState(State desiredState) { } } -void CharacterController::updateGravity() { - int16_t collisionGroup = computeCollisionGroup(); - if (_state == State::Hover || collisionGroup == BULLET_COLLISION_GROUP_COLLISIONLESS) { - _gravity = 0.0f; - } else { - _gravity = DEFAULT_AVATAR_GRAVITY; - } - if (_rigidBody) { - _rigidBody->setGravity(_gravity * _currentUp); - } -} - void CharacterController::setLocalBoundingBox(const glm::vec3& minCorner, const glm::vec3& scale) { float x = scale.x; float z = scale.z; From 322b7fc0609dd193e9c17807c31914b24a646b04 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Wed, 20 Sep 2017 23:37:33 +0100 Subject: [PATCH 7/9] Cleanup from Merge --- interface/src/avatar/MyAvatar.h | 3 +++ libraries/physics/src/CharacterController.cpp | 6 ------ 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index b1351dc498..9620d61a49 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -150,6 +150,9 @@ class MyAvatar : public Avatar { Q_PROPERTY(float hmdRollControlDeadZone READ getHMDRollControlDeadZone WRITE setHMDRollControlDeadZone) Q_PROPERTY(float hmdRollControlRate READ getHMDRollControlRate WRITE setHMDRollControlRate) + Q_PROPERTY(float userHeight READ getUserHeight WRITE setUserHeight) + Q_PROPERTY(float userEyeHeight READ getUserEyeHeight) + const QString DOMINANT_LEFT_HAND = "left"; const QString DOMINANT_RIGHT_HAND = "right"; diff --git a/libraries/physics/src/CharacterController.cpp b/libraries/physics/src/CharacterController.cpp index 0904e39d25..5e446a52a9 100755 --- a/libraries/physics/src/CharacterController.cpp +++ b/libraries/physics/src/CharacterController.cpp @@ -393,9 +393,6 @@ void CharacterController::setState(State desiredState) { } } -<<<<<<< HEAD -<<<<<<< HEAD -======= void CharacterController::updateGravity() { int16_t collisionGroup = computeCollisionGroup(); if (_state == State::Hover || collisionGroup == BULLET_COLLISION_GROUP_COLLISIONLESS) { @@ -408,9 +405,6 @@ void CharacterController::updateGravity() { } } ->>>>>>> 5e5b77fbaaeff61a26144a240329eca70765c1a9 -======= ->>>>>>> 4d904bd5ce7d7b1a805c2f8fbdda630afc27576f void CharacterController::setLocalBoundingBox(const glm::vec3& minCorner, const glm::vec3& scale) { float x = scale.x; float z = scale.z; From 45f79b43412344f2eff7a9c66a2072e5f594599e Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Thu, 21 Sep 2017 00:00:24 +0100 Subject: [PATCH 8/9] Small fix --- libraries/physics/src/CharacterController.cpp | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/libraries/physics/src/CharacterController.cpp b/libraries/physics/src/CharacterController.cpp index 5e446a52a9..8d32535632 100755 --- a/libraries/physics/src/CharacterController.cpp +++ b/libraries/physics/src/CharacterController.cpp @@ -393,18 +393,6 @@ void CharacterController::setState(State desiredState) { } } -void CharacterController::updateGravity() { - int16_t collisionGroup = computeCollisionGroup(); - if (_state == State::Hover || collisionGroup == BULLET_COLLISION_GROUP_COLLISIONLESS) { - _gravity = 0.0f; - } else { - _gravity = DEFAULT_AVATAR_GRAVITY; - } - if (_rigidBody) { - _rigidBody->setGravity(_gravity * _currentUp); - } -} - void CharacterController::setLocalBoundingBox(const glm::vec3& minCorner, const glm::vec3& scale) { float x = scale.x; float z = scale.z; From 0d33976035fd2e96a0aec69e3993f9cbbf5be328 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Fri, 22 Sep 2017 00:38:30 +0100 Subject: [PATCH 9/9] Real time changes --- libraries/physics/src/CharacterController.cpp | 26 +++++++++---------- libraries/physics/src/CharacterController.h | 6 +++-- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/libraries/physics/src/CharacterController.cpp b/libraries/physics/src/CharacterController.cpp index 8d32535632..32e764bd10 100755 --- a/libraries/physics/src/CharacterController.cpp +++ b/libraries/physics/src/CharacterController.cpp @@ -20,9 +20,6 @@ const btVector3 LOCAL_UP_AXIS(0.0f, 1.0f, 0.0f); -const float DEFAULT_CHARACTER_GRAVITY = -5.0f; -float currentAvatarGravity = DEFAULT_CHARACTER_GRAVITY; - #ifdef DEBUG_STATE_CHANGE #define SET_STATE(desiredState, reason) setState(desiredState, reason) #else @@ -123,7 +120,7 @@ void CharacterController::setDynamicsWorld(btDynamicsWorld* world) { _dynamicsWorld->addRigidBody(_rigidBody, collisionGroup, BULLET_COLLISION_MASK_MY_AVATAR); _dynamicsWorld->addAction(this); // restore gravity settings because adding an object to the world overwrites its gravity setting - _rigidBody->setGravity(_gravity * _currentUp); + _rigidBody->setGravity(_currentGravity * _currentUp); btCollisionShape* shape = _rigidBody->getCollisionShape(); assert(shape && shape->getShapeType() == CONVEX_HULL_SHAPE_PROXYTYPE); _ghost.setCharacterShape(static_cast(shape)); @@ -305,7 +302,7 @@ void CharacterController::playerStep(btCollisionWorld* collisionWorld, btScalar // add minimum velocity to counteract gravity's displacement during one step // Note: the 0.5 factor comes from the fact that we really want the // average velocity contribution from gravity during the step - stepUpSpeed -= 0.5f * _gravity * timeToStep; // remember: _gravity is negative scalar + stepUpSpeed -= 0.5f * _currentGravity * timeToStep; // remember: _gravity is negative scalar btScalar vDotUp = velocity.dot(_currentUp); if (vDotUp < stepUpSpeed) { @@ -354,25 +351,26 @@ static const char* stateToStr(CharacterController::State state) { } #endif // #ifdef DEBUG_STATE_CHANGE -void CharacterController::updateGravity() { +void CharacterController::updateCurrentGravity() { int16_t collisionGroup = computeCollisionGroup(); if (_state == State::Hover || collisionGroup == BULLET_COLLISION_GROUP_COLLISIONLESS) { - _gravity = 0.0f; + _currentGravity = 0.0f; } else { - _gravity = currentAvatarGravity; + _currentGravity = _gravity; } if (_rigidBody) { - _rigidBody->setGravity(_gravity * _currentUp); + _rigidBody->setGravity(_currentGravity * _currentUp); } } void CharacterController::setGravity(float gravity) { - currentAvatarGravity = gravity; + _gravity = gravity; + updateCurrentGravity(); } float CharacterController::getGravity() { - return currentAvatarGravity; + return _gravity; } #ifdef DEBUG_STATE_CHANGE @@ -389,7 +387,7 @@ void CharacterController::setState(State desiredState) { qCDebug(physics) << "CharacterController::setState" << stateToStr(desiredState) << "from" << stateToStr(_state) << "," << reason; #endif _state = desiredState; - updateGravity(); + updateCurrentGravity(); } } @@ -448,14 +446,14 @@ void CharacterController::handleChangedCollisionGroup() { _dynamicsWorld->addRigidBody(_rigidBody, collisionGroup, BULLET_COLLISION_MASK_MY_AVATAR); } _pendingFlags &= ~PENDING_FLAG_UPDATE_COLLISION_GROUP; - updateGravity(); + updateCurrentGravity(); } } void CharacterController::updateUpAxis(const glm::quat& rotation) { _currentUp = quatRotate(glmToBullet(rotation), LOCAL_UP_AXIS); if (_rigidBody) { - _rigidBody->setGravity(_gravity * _currentUp); + _rigidBody->setGravity(_currentGravity * _currentUp); } } diff --git a/libraries/physics/src/CharacterController.h b/libraries/physics/src/CharacterController.h index 49db3b9bf4..0f97cc7c16 100644 --- a/libraries/physics/src/CharacterController.h +++ b/libraries/physics/src/CharacterController.h @@ -24,6 +24,7 @@ #include "BulletUtil.h" #include "CharacterGhostObject.h" +#include "AvatarConstants.h" const uint32_t PENDING_FLAG_ADD_TO_SIMULATION = 1U << 0; const uint32_t PENDING_FLAG_REMOVE_FROM_SIMULATION = 1U << 1; @@ -134,7 +135,7 @@ protected: #endif virtual void updateMassProperties() = 0; - void updateGravity(); + void updateCurrentGravity(); void updateUpAxis(const glm::quat& rotation); bool checkForSupport(btCollisionWorld* collisionWorld); @@ -187,7 +188,8 @@ protected: bool _stepUpEnabled { true }; bool _hasSupport; - btScalar _gravity { 0.0f }; + btScalar _currentGravity { 0.0f }; + btScalar _gravity { DEFAULT_AVATAR_GRAVITY }; btScalar _followTime; btVector3 _followLinearDisplacement;