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);