Gravity well

This commit is contained in:
Robin Engman 2014-02-11 13:36:14 +01:00
parent 70c388779e
commit 7075e6add6
3 changed files with 26 additions and 0 deletions

View File

@ -26,6 +26,9 @@ API_Impl::API_Impl()
this->dynamicsWorld = NULL; this->dynamicsWorld = NULL;
this->timeStep = 1.0f/120.0f; this->timeStep = 1.0f/120.0f;
this->gravityPoint = Float3(0.0f, 0.0f, 0.0f);
this->gravity = 10.0f;
} }
API_Impl::~API_Impl() API_Impl::~API_Impl()
@ -48,6 +51,16 @@ API_Impl::~API_Impl()
} }
} }
void API_Impl::SetGravityPoint(::Oyster::Math::Float3 gravityPoint)
{
this->gravityPoint = gravityPoint;
}
void API_Impl::SetGravity(float gravity)
{
this->gravity = gravity;
}
// Bullet physics // Bullet physics
ICustomBody* API_Impl::AddCollisionSphere(float radius, ::Oyster::Math::Float4 rotation, ::Oyster::Math::Float3 position, float mass, float restitution, float staticFriction, float dynamicFriction) ICustomBody* API_Impl::AddCollisionSphere(float radius, ::Oyster::Math::Float4 rotation, ::Oyster::Math::Float3 position, float mass, float restitution, float staticFriction, float dynamicFriction)
{ {
@ -173,6 +186,11 @@ void API_Impl::SetTimeStep(float timeStep)
void API_Impl::UpdateWorld() void API_Impl::UpdateWorld()
{ {
for(unsigned int i = 0; i < this->customBodies.size(); i++ )
{
this->customBodies[i]->SetGravity(-(this->customBodies[i]->GetState().centerPos - this->gravityPoint).GetNormalized()*this->gravity);
}
this->dynamicsWorld->stepSimulation(this->timeStep, 1, this->timeStep); this->dynamicsWorld->stepSimulation(this->timeStep, 1, this->timeStep);
ICustomBody::State state; ICustomBody::State state;

View File

@ -21,6 +21,9 @@ namespace Oyster
void MoveToLimbo( const ICustomBody* objRef ); void MoveToLimbo( const ICustomBody* objRef );
void ReleaseFromLimbo( const ICustomBody* objRef ); void ReleaseFromLimbo( const ICustomBody* objRef );
void SetGravityPoint(::Oyster::Math::Float3 gravityPoint);
void SetGravity(float gravity);
// Bullet physics // Bullet physics
ICustomBody* AddCollisionSphere(float radius, ::Oyster::Math::Float4 rotation, ::Oyster::Math::Float3 position, float mass, float restitution, float staticFriction, float dynamicFriction); ICustomBody* AddCollisionSphere(float radius, ::Oyster::Math::Float4 rotation, ::Oyster::Math::Float3 position, float mass, float restitution, float staticFriction, float dynamicFriction);
ICustomBody* AddCollisionBox(::Oyster::Math::Float3 halfSize, ::Oyster::Math::Float4 rotation, ::Oyster::Math::Float3 position, float mass, float restitution, float staticFriction, float dynamicFriction); ICustomBody* AddCollisionBox(::Oyster::Math::Float3 halfSize, ::Oyster::Math::Float4 rotation, ::Oyster::Math::Float3 position, float mass, float restitution, float staticFriction, float dynamicFriction);
@ -41,6 +44,9 @@ namespace Oyster
std::vector<ICustomBody*> customBodies; std::vector<ICustomBody*> customBodies;
float timeStep; float timeStep;
::Oyster::Math::Float3 gravityPoint;
float gravity;
}; };
namespace Default namespace Default

View File

@ -78,6 +78,8 @@ namespace Oyster
********************************************************/ ********************************************************/
virtual void ReleaseFromLimbo( const ICustomBody* objRef ) = 0; virtual void ReleaseFromLimbo( const ICustomBody* objRef ) = 0;
virtual void SetGravityPoint(::Oyster::Math::Float3 gravityPoint) = 0;
virtual void SetGravity(float gravity) = 0;
// Bullet physics // Bullet physics
virtual ICustomBody* AddCollisionSphere(float radius, ::Oyster::Math::Float4 rotation, ::Oyster::Math::Float3 position, float mass, float restitution, float staticFriction, float dynamicFriction) = 0; virtual ICustomBody* AddCollisionSphere(float radius, ::Oyster::Math::Float4 rotation, ::Oyster::Math::Float3 position, float mass, float restitution, float staticFriction, float dynamicFriction) = 0;