From 72ca62c4afdcbd07e5664d18e6a94ce82fda8bb1 Mon Sep 17 00:00:00 2001 From: Cain Kilgore Date: Thu, 14 Sep 2017 00:25:11 +0100 Subject: [PATCH] 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);