55 int firstHit=startHit;
76 int rIslandId0,lIslandId0;
79 return lIslandId0 < rIslandId0;
143 int numCurConstraints = 0;
170 for (i=0;i<numBodies;i++)
172 for (i=0;i<numManifolds;i++)
174 for (i=0;i<numCurConstraints;i++)
206 m_sortedConstraints (),
207 m_solverIslandCallback ( NULL ),
208 m_constraintSolver(constraintSolver),
211 m_synchronizeAllMotionStates(false),
212 m_applySpeculativeContactRestitution(false),
288 bool drawConstraints =
false;
294 drawConstraints =
true;
401 int numSimulationSubSteps = 0;
409 numSimulationSubSteps = int(
m_localTime / fixedTimeStep);
410 m_localTime -= numSimulationSubSteps * fixedTimeStep;
415 fixedTimeStep = timeStep;
419 numSimulationSubSteps = 0;
423 numSimulationSubSteps = 1;
434 if (numSimulationSubSteps)
438 int clampedSimulationSteps = (numSimulationSubSteps > maxSubSteps)? maxSubSteps : numSimulationSubSteps;
446 for (
int i=0;i<clampedSimulationSteps;i++)
459 #ifndef BT_NO_PROFILE
461 #endif //BT_NO_PROFILE
463 return numSimulationSubSteps;
472 (*m_internalPreTickCallback)(
this, timeStep);
512 (*m_internalTickCallback)(
this, timeStep);
608 m_actions[i]->updateAction(
this, timeStep);
652 if (disableCollisionsBetweenLinkedBodies)
746 if (((colObj0) && (!(colObj0)->isStaticOrKinematicObject())) &&
747 ((colObj1) && (!(colObj1)->isStaticOrKinematicObject())))
753 (colObj1)->getIslandTag());
762 for (i=0;i< numConstraints ; i++ )
770 if (((colObj0) && (!(colObj0)->isStaticOrKinematicObject())) &&
771 ((colObj1) && (!(colObj1)->isStaticOrKinematicObject())))
777 (colObj1)->getIslandTag());
825 btVector3 relativeVelocity = (linVelA-linVelB);
830 return ClosestConvexResultCallback::addSingleResult (convexResult, normalInWorldSpace);
840 if (!ClosestConvexResultCallback::needsCollision(proxy0))
858 for (
int j=0;j<manifoldArray.
size();j++)
885 BT_PROFILE(
"release predictive contact manifolds");
914 #ifdef PREDICTIVE_CONTACT_USE_STATIC_ONLY
943 btTransform modifiedPredictedTrans = predictedTrans;
947 if (sweepResults.hasHit() && (sweepResults.m_closestHitFraction < 1.f))
951 btScalar distance = distVec.
dot(-sweepResults.m_hitNormalWorld);
958 btVector3 localPointB = sweepResults.m_hitCollisionObject->getWorldTransform().inverse()*worldPointB;
962 bool isPredictive =
true;
1000 #ifdef USE_STATIC_ONLY
1029 btTransform modifiedPredictedTrans = predictedTrans;
1033 if (sweepResults.hasHit() && (sweepResults.m_closestHitFraction < 1.f))
1046 btScalar maxSpeedSqr = maxSpeed*maxSpeed;
1047 if (linVel.
length2()>maxSpeedSqr)
1057 printf(
"sm2=%f\n",sm2);
1085 BT_PROFILE(
"apply speculative contact restitution");
1106 btVector3 rel_pos1 = pos2 - body1->getWorldTransform().getOrigin();
1111 body1->applyImpulse(-imp,rel_pos1);
1147 #ifndef BT_NO_PROFILE
1149 #endif //BT_NO_PROFILE
1195 if(minAng == maxAng)
1199 bool drawSect =
true;
1211 getDebugDrawer()->
drawArc(center, normal, axis, dbgDrawSize, dbgDrawSize, minAng, maxAng,
btVector3(0,0,0), drawSect);
1226 static int nSegments = 8*4;
1230 for (
int i=0; i<nSegments; i++)
1237 if (i%(nSegments/8) == 0)
1256 getDebugDrawer()->
drawArc(pivot, normal, axis1, dbgDrawSize, dbgDrawSize, -twa-tws, -twa+tws,
btVector3(0,0,0),
true);
1279 getDebugDrawer()->
drawSpherePatch(center, up, axis, dbgDrawSize *
btScalar(.9f), minTh, maxTh, minPs, maxPs,
btVector3(0,0,0));
1288 ref[0] = cy*cz*axis[0] + cy*sz*axis[1] - sy*axis[2];
1289 ref[1] = -sz*axis[0] + cz*axis[1];
1290 ref[2] = cz*sy*axis[0] + sz*sy*axis[1] + cy*axis[2];
1297 getDebugDrawer()->
drawArc(center, normal, ref, dbgDrawSize, dbgDrawSize, -
SIMD_PI,
SIMD_PI,
btVector3(0,0,0),
false);
1299 else if(minFi < maxFi)
1301 getDebugDrawer()->
drawArc(center, normal, ref, dbgDrawSize, dbgDrawSize, minFi, maxFi,
btVector3(0,0,0),
true);
1328 getDebugDrawer()->
drawArc(center, normal, axis, dbgDrawSize, dbgDrawSize, a_min, a_max,
btVector3(0,0,0),
true);
1405 #ifdef BT_USE_DOUBLE_PRECISION
1415 memset(worldInfo ,0x00,len);
1445 #ifdef BT_USE_DOUBLE_PRECISION
1446 const char* structType =
"btDynamicsWorldDoubleData";
1447 #else//BT_USE_DOUBLE_PRECISION
1448 const char* structType =
"btDynamicsWorldFloatData";
1449 #endif//BT_USE_DOUBLE_PRECISION