From 604a17056c1da6d5c84fe1829fb7cb62f9c93a35 Mon Sep 17 00:00:00 2001 From: Dander7BD Date: Fri, 20 Dec 2013 11:15:43 +0100 Subject: [PATCH] Partial SimpleRigid update --- .../Implementation/SimpleRigidBody.cpp | 17 +++++++++++++++-- .../Implementation/SimpleRigidBody.h | 3 ++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Code/GamePhysics/Implementation/SimpleRigidBody.cpp b/Code/GamePhysics/Implementation/SimpleRigidBody.cpp index 90df71a1..2d81d233 100644 --- a/Code/GamePhysics/Implementation/SimpleRigidBody.cpp +++ b/Code/GamePhysics/Implementation/SimpleRigidBody.cpp @@ -47,18 +47,19 @@ SimpleRigidBody::SimpleRigidBody() this->rigid.SetMass_KeepMomentum( 16.0f ); this->gravityNormal = Float3::null; this->collisionAction = Default::EventAction_Collision; - this->ignoreGravity = false; + this->ignoreGravity = this->isForwarded = false; this->scene = nullptr; } SimpleRigidBody::SimpleRigidBody( const API::SimpleBodyDescription &desc ) { - this->rigid = RigidBody(); this->rigid.SetRotation( desc.rotation ); this->rigid.centerPos = desc.centerPosition; this->rigid.SetSize( desc.size ); this->rigid.SetMass_KeepMomentum( desc.mass ); this->rigid.SetMomentOfInertia_KeepMomentum( desc.inertiaTensor ); + this->deltaPos = Float4::null; + this->deltaAxis = Float4::null; this->gravityNormal = Float3::null; @@ -113,6 +114,13 @@ void SimpleRigidBody::SetState( const SimpleRigidBody::State &state ) this->rigid.frictionCoeff_Static = state.GetFrictionCoeff_Static(); this->rigid.frictionCoeff_Kinetic = state.GetFrictionCoeff_Kinetic(); + if( state.IsForwarded() ) + { + this->deltaPos += state.GetForward_DeltaPos(); + this->deltaAxis += state.GetForward_DeltaAxis(); + this->isForwarded; + } + if( this->scene ) { if( state.IsSpatiallyAltered() ) @@ -243,6 +251,11 @@ Float3 SimpleRigidBody::GetRigidLinearVelocity() const UpdateState SimpleRigidBody::Update( Float timeStepLength ) { + if( this->isForwarded ) + { + // this->rigid. + } + this->rigid.Update_LeapFrog( timeStepLength ); // compare previous and new state and return result diff --git a/Code/GamePhysics/Implementation/SimpleRigidBody.h b/Code/GamePhysics/Implementation/SimpleRigidBody.h index 3929669b..f407ad1d 100644 --- a/Code/GamePhysics/Implementation/SimpleRigidBody.h +++ b/Code/GamePhysics/Implementation/SimpleRigidBody.h @@ -53,10 +53,11 @@ namespace Oyster { namespace Physics private: ::Oyster::Physics3D::RigidBody rigid; + ::Oyster::Math::Float4 deltaPos, deltaAxis; ::Oyster::Math::Float3 gravityNormal; EventAction_Collision collisionAction; Octree *scene; - bool ignoreGravity; + bool ignoreGravity, isForwarded; }; } }