mirror of
https://github.com/overte-org/overte.git
synced 2025-04-14 07:47:30 +02:00
Gravity Implementation
This commit is contained in:
parent
f741083352
commit
c2e342ddac
4 changed files with 32 additions and 26 deletions
|
@ -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() {
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in a new issue