From 462413b5270f793c2685cf0e34ab4ee1930f2b75 Mon Sep 17 00:00:00 2001 From: Robin Engman Date: Tue, 11 Feb 2014 13:09:46 +0100 Subject: [PATCH] Added support for gravity change --- Code/GamePhysics/Implementation/SimpleRigidBody.cpp | 7 ++++++- Code/GamePhysics/Implementation/SimpleRigidBody.h | 5 +++++ Code/GamePhysics/PhysicsAPI.h | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Code/GamePhysics/Implementation/SimpleRigidBody.cpp b/Code/GamePhysics/Implementation/SimpleRigidBody.cpp index 784bd0cc..1201cad8 100644 --- a/Code/GamePhysics/Implementation/SimpleRigidBody.cpp +++ b/Code/GamePhysics/Implementation/SimpleRigidBody.cpp @@ -139,6 +139,12 @@ void SimpleRigidBody::SetAngularFactor(Float factor) this->rigidBody->setAngularFactor(factor); } +void SimpleRigidBody::SetGravity(Float3 gravity) +{ + this->rigidBody->setGravity(btVector3(gravity.x, gravity.y, gravity.z)); + this->gravity = gravity; +} + void SimpleRigidBody::SetUpAndRight(::Oyster::Math::Float3 up, ::Oyster::Math::Float3 right) { btTransform trans; @@ -167,7 +173,6 @@ void SimpleRigidBody::SetUpAndForward(::Oyster::Math::Float3 up, ::Oyster::Math: rotation[1] = upVector.normalized(); rotation[2] = forwardVector.normalized(); rotation[0] = forwardVector.cross(upVector).normalized(); - trans = this->rigidBody->getWorldTransform(); trans.setBasis(rotation); this->rigidBody->setWorldTransform(trans); diff --git a/Code/GamePhysics/Implementation/SimpleRigidBody.h b/Code/GamePhysics/Implementation/SimpleRigidBody.h index f85b24df..70709c83 100644 --- a/Code/GamePhysics/Implementation/SimpleRigidBody.h +++ b/Code/GamePhysics/Implementation/SimpleRigidBody.h @@ -32,6 +32,8 @@ namespace Oyster void SetRotation(Math::Float3 eulerAngles); void SetAngularFactor(Math::Float factor); + void SetGravity(Math::Float3 gravity); + void SetUpAndRight(::Oyster::Math::Float3 up, ::Oyster::Math::Float3 right); void SetUpAndForward(::Oyster::Math::Float3 up, ::Oyster::Math::Float3 forward); @@ -51,6 +53,7 @@ namespace Oyster void* GetCustomTag() const; private: + btCollisionShape* collisionShape; btDefaultMotionState* motionState; btRigidBody* rigidBody; @@ -61,6 +64,8 @@ namespace Oyster EventAction_Move onMovement; void *customTag; + + ::Oyster::Math::Float3 gravity; }; } } diff --git a/Code/GamePhysics/PhysicsAPI.h b/Code/GamePhysics/PhysicsAPI.h index 767caa98..d44cb2db 100644 --- a/Code/GamePhysics/PhysicsAPI.h +++ b/Code/GamePhysics/PhysicsAPI.h @@ -139,6 +139,8 @@ namespace Oyster virtual void SetRotation(::Oyster::Math::Float3 eulerAngles) = 0; virtual void SetAngularFactor(::Oyster::Math::Float factor) = 0; + virtual void SetGravity(::Oyster::Math::Float3 gravity) = 0; + virtual void SetUpAndRight(::Oyster::Math::Float3 up, ::Oyster::Math::Float3 right) = 0; virtual void SetUpAndForward(::Oyster::Math::Float3 up, ::Oyster::Math::Float3 forward) = 0;