void PhysicsBody::initDefaults(void) { setAutoDisableFlag(dBodyGetAutoDisableFlag(_BodyID)); setAutoDisableLinearThreshold(dBodyGetAutoDisableLinearThreshold(_BodyID)); setAutoDisableAngularThreshold(dBodyGetAutoDisableAngularThreshold(_BodyID)); setAutoDisableSteps(dBodyGetAutoDisableSteps(_BodyID)); setAutoDisableTime(dBodyGetAutoDisableTime(_BodyID)); setFiniteRotationMode(dBodyGetFiniteRotationMode(_BodyID)); dVector3 odeVec; dBodyGetFiniteRotationAxis(_BodyID, odeVec); setFiniteRotationAxis(Vec3f(odeVec[0], odeVec[1], odeVec[3])); setGravityMode(dBodyGetGravityMode(_BodyID)); dMass TheMass; dBodyGetMass(_BodyID, &TheMass); setMassStruct(TheMass); }
void CIrrOdeWorld::initPhysics() { if (m_bPhysicsInitialized) return; m_iNodesInitialized=0; CIrrOdeSceneNode::initPhysics(); m_iWorldId=m_pOdeDevice->worldCreate(); m_iJointGroupId=m_pOdeDevice->jointGroupCreate(0); if (!m_pWorldSpace) m_pWorldSpace=new CIrrOdeSpace(this,m_pSceneManager); if (m_pWorldSpace!=NULL) m_pWorldSpace->initPhysics(); setLinearDamping (m_fDampingLinear ); setAngularDamping (m_fDampingAngular ); setLinearDampingThreshold (m_fDampingLinearThreshold ); setAngularDampingThreshold(m_fDampingAngularThreshold); setAutoDisableFlag (m_iAutoDisableFlag ); setAutoDisableLinearThreshold (m_fAutoDisableLinearThreshold ); setAutoDisableAngularThreshold(m_fAutoDisableAngularThreshold); setAutoDisableSteps (m_iAutoDisableSteps ); setAutoDisableTime (m_fAutoDisableTime ); setGravity(m_cGravity); if (m_fMaxAngularSpeed!=_DEFAULT_MAX_ANGULAR_SPEED) setMaxAngularSpeed(m_fMaxAngularSpeed); #ifdef _TRACE_INIT_PHYSICS printf("world created .. id=%i\n",(int)m_iWorldId); #endif irr::core::list<CIrrOdeSpace *>::Iterator s; for (s=m_pSpaces.begin(); s!=m_pSpaces.end(); s++) { #ifdef _TRACE_INIT_PHYSICS printf("CIrrOdeWorld::initPhysics: init space\n"); #endif CIrrOdeSpace *pSpace=(*s); pSpace->initPhysics(); } irr::core::list<CIrrOdeGeom *>::Iterator i; for (i=m_pGeoms.begin(); i!=m_pGeoms.end(); i++) { #ifdef _TRACE_INIT_PHYSICS printf("CIrrOdeWorld::initPhysics: init geom\n"); #endif CIrrOdeGeom *pGeom=(*i); pGeom->initPhysics(); } irr::core::list<CIrrOdeBody *>::Iterator b,ib2; for (b=m_pBodies.begin(); b!=m_pBodies.end(); b++) { #ifdef _TRACE_INIT_PHYSICS printf("CIrrOdeWorld::initPhysics: init body\n"); #endif CIrrOdeBody *b1=*b; b1->initPhysics(); } irr::core::list<irr::ode::IIrrOdeStepMotor *>::Iterator it; for (it=m_lStepMotors.begin(); it!=m_lStepMotors.end(); it++) (*it)->initPhysics(); m_bPhysicsInitialized = true; }