more Bullet 2.x upgrading. fair amount of functionality is now restored, not all yet.

This commit is contained in:
Erwin Coumans 2006-11-21 12:26:05 +00:00
parent 318b98fc9a
commit 8ad6d7f401
4 changed files with 63 additions and 23 deletions

@ -889,12 +889,7 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
CcdConstructionInfo ci;
class PHY_IMotionState* motionstate = new KX_MotionState(gameobj->GetSGNode());
if (objprop->m_ghost)
{
ci.m_collisionFlags |= btCollisionObject::CF_NO_CONTACT_RESPONSE;
}
if (!objprop->m_dyna)
{
@ -973,7 +968,7 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
halfExtents /= 2.f;
bm = new btConeShape(objprop->m_boundobject.c.m_radius,objprop->m_boundobject.c.m_height);
bm = new btConeShapeZ(objprop->m_boundobject.c.m_radius,objprop->m_boundobject.c.m_height);
bm->calculateLocalInertia(ci.m_mass,ci.m_localInertiaTensor);
break;
@ -1078,10 +1073,15 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
gameobj->SetPhysicsController(physicscontroller,isbulletdyna);
physicscontroller->setNewClientInfo(gameobj->getClientInfo());
btRigidBody* rbody = physicscontroller->GetRigidBody();
if (objprop->m_disableSleeping)
physicscontroller->GetRigidBody()->setActivationState(DISABLE_DEACTIVATION);
rbody->setActivationState(DISABLE_DEACTIVATION);
if (objprop->m_ghost)
{
rbody->setCollisionFlags(rbody->getCollisionFlags() | btCollisionObject::CF_NO_CONTACT_RESPONSE);
}
if (objprop->m_dyna && !objprop->m_angular_rigidbody)
{
/*

@ -165,7 +165,7 @@ bool CcdPhysicsController::SynchronizeMotionStates(float time)
btVector3 worldPos;
btQuaternion worldquat;
m_MotionState->getWorldPosition(worldPos[0],worldPos[1],worldPos[2]);
/* m_MotionState->getWorldPosition(worldPos[0],worldPos[1],worldPos[2]);
m_MotionState->getWorldOrientation(worldquat[0],worldquat[1],worldquat[2],worldquat[3]);
btTransform oldTrans = m_body->getCenterOfMassTransform();
btTransform newTrans(worldquat,worldPos);
@ -174,7 +174,7 @@ bool CcdPhysicsController::SynchronizeMotionStates(float time)
//need to keep track of previous position for friction effects...
m_MotionState->calculateWorldTransformations();
*/
float scale[3];
m_MotionState->getWorldScaling(scale[0],scale[1],scale[2]);
btVector3 scaling(scale[0],scale[1],scale[2]);
@ -245,7 +245,12 @@ void CcdPhysicsController::RelativeTranslate(float dlocX,float dlocY,float dloc
{
if (m_body)
{
m_body->activate();
m_body->activate(true);
if (m_body->isStaticObject())
{
m_body->setCollisionFlags(m_body->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
}
btVector3 dloc(dlocX,dlocY,dlocZ);
btTransform xform = m_body->getCenterOfMassTransform();
@ -265,7 +270,11 @@ void CcdPhysicsController::RelativeRotate(const float rotval[9],bool local)
{
if (m_body )
{
m_body->activate();
m_body->activate(true);
if (m_body->isStaticObject())
{
m_body->setCollisionFlags(m_body->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
}
btMatrix3x3 drotmat( rotval[0],rotval[1],rotval[2],
rotval[4],rotval[5],rotval[6],
@ -303,7 +312,12 @@ void CcdPhysicsController::getOrientation(float &quatImag0,float &quatImag1,flo
}
void CcdPhysicsController::setOrientation(float quatImag0,float quatImag1,float quatImag2,float quatReal)
{
m_body->activate();
m_body->activate(true);
if (m_body->isStaticObject())
{
m_body->setCollisionFlags(m_body->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
}
m_MotionState->setWorldOrientation(quatImag0,quatImag1,quatImag2,quatReal);
btTransform xform = m_body->getCenterOfMassTransform();
xform.setRotation(btQuaternion(quatImag0,quatImag1,quatImag2,quatReal));
@ -313,7 +327,11 @@ void CcdPhysicsController::setOrientation(float quatImag0,float quatImag1,float
void CcdPhysicsController::setPosition(float posX,float posY,float posZ)
{
m_body->activate();
m_body->activate(true);
if (m_body->isStaticObject())
{
m_body->setCollisionFlags(m_body->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
}
m_MotionState->setWorldPosition(posX,posY,posZ);
btTransform xform = m_body->getCenterOfMassTransform();
xform.setOrigin(btVector3(posX,posY,posZ));
@ -376,7 +394,7 @@ void CcdPhysicsController::SetAngularVelocity(float ang_velX,float ang_velY,flo
btVector3 angvel(ang_velX,ang_velY,ang_velZ);
if (angvel.length2() > (SIMD_EPSILON*SIMD_EPSILON))
{
m_body->activate();
m_body->activate(true);
}
{
@ -396,7 +414,7 @@ void CcdPhysicsController::SetLinearVelocity(float lin_velX,float lin_velY,floa
btVector3 linVel(lin_velX,lin_velY,lin_velZ);
if (linVel.length2() > (SIMD_EPSILON*SIMD_EPSILON))
{
m_body->activate();
m_body->activate(true);
}
{

@ -251,6 +251,12 @@ public:
#endif //NEW_BULLET_VEHICLE_SUPPORT
void CcdPhysicsEnvironment::setDebugDrawer(btIDebugDraw* debugDrawer)
{
if (debugDrawer && m_dynamicsWorld)
m_dynamicsWorld->setDebugDrawer(debugDrawer);
m_debugDrawer = debugDrawer;
}
static void DrawAabb(btIDebugDraw* debugDrawer,const btVector3& from,const btVector3& to,const btVector3& color)
{
@ -321,7 +327,7 @@ m_enableSatCollisionDetection(false)
setSolverType(1);//issues with quickstep and memory allocations
m_dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,pairCache);
m_dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,pairCache,new btSequentialImpulseConstraintSolver2());
m_debugDrawer = 0;
m_gravity = btVector3(0.f,-10.f,0.f);
m_dynamicsWorld->setGravity(m_gravity);
@ -340,6 +346,12 @@ void CcdPhysicsEnvironment::addCcdPhysicsController(CcdPhysicsController* ctrl)
m_controllers.push_back(ctrl);
m_dynamicsWorld->addRigidBody(body);
if (body->isStaticOrKinematicObject())
{
body->setActivationState(ISLAND_SLEEPING);
}
//CollisionObject(body,ctrl->GetCollisionFilterGroup(),ctrl->GetCollisionFilterMask());
assert(body->getBroadphaseHandle());
@ -438,15 +450,28 @@ void CcdPhysicsEnvironment::beginFrame()
bool CcdPhysicsEnvironment::proceedDeltaTime(double curTime,float timeStep)
{
int numCtrl = GetNumControllers();
for (int i=0;i<numCtrl;i++)
int i,numCtrl = GetNumControllers();
for (i=0;i<numCtrl;i++)
{
CcdPhysicsController* ctrl = GetPhysicsController(i);
ctrl->SynchronizeMotionStates(timeStep);
}
m_dynamicsWorld->stepSimulation(timeStep);
m_dynamicsWorld->stepSimulation(timeStep,5);//5);
numCtrl = GetNumControllers();
for (i=0;i<numCtrl;i++)
{
CcdPhysicsController* ctrl = GetPhysicsController(i);
ctrl->SynchronizeMotionStates(timeStep);
}
for (i=0;i<m_wrapperVehicles.size();i++)
{
WrapperVehicle* veh = m_wrapperVehicles[i];
veh->SyncWheels();
}
return true;
}

@ -81,10 +81,7 @@ protected:
/// Perform an integration step of duration 'timeStep'.
virtual void setDebugDrawer(btIDebugDraw* debugDrawer)
{
m_debugDrawer = debugDrawer;
}
virtual void setDebugDrawer(btIDebugDraw* debugDrawer);
virtual void setNumIterations(int numIter);
virtual void setNumTimeSubSteps(int numTimeSubSteps)