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);
}
Example #2
0
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;
}