///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5). ///If no axis is provided, it uses the default axis for this constraint. public override void setParam( btTypedConstraint.btConstraintParams num, double value, int axis = -1 ) { if( ( axis == -1 ) || ( axis == 5 ) ) { switch( num ) { case btConstraintParams.BT_CONSTRAINT_STOP_ERP: m_stopERP = value; m_flags |= btHingeFlags.BT_HINGE_FLAGS_ERP_STOP; break; case btConstraintParams.BT_CONSTRAINT_STOP_CFM: m_stopCFM = value; m_flags |= btHingeFlags.BT_HINGE_FLAGS_CFM_STOP; break; case btConstraintParams.BT_CONSTRAINT_CFM: m_normalCFM = value; m_flags |= btHingeFlags.BT_HINGE_FLAGS_CFM_NORM; break; case btConstraintParams.BT_CONSTRAINT_ERP: m_normalERP = value; m_flags |= btHingeFlags.BT_HINGE_FLAGS_ERP_NORM; break; default: btAssertConstrParams( false ); break; } } else { btAssertConstrParams( false ); } }
void Init() { m_angularOnly = ( false ); m_enableAngularMotor = ( false ); //m_useSolveConstraintObsolete = ( false/*HINGE_USE_OBSOLETE_SOLVER*/ ); //m_useOffsetForConstraintFrame = ( true/*HINGE_USE_FRAME_OFFSET*/ ); m_flags = ( 0 ); m_normalCFM = ( 0 ); m_normalERP = ( 0 ); m_stopCFM = ( 0 ); m_stopERP = ( 0 ); #if !_BT_USE_CENTER_LIMIT_ //start with free m_lowerLimit = (double)( 1.0f ); m_upperLimit = (double)( -1.0f ); m_biasFactor = 0.3f; m_relaxationFactor = 1.0f; m_limitSoftness = 0.9f; m_solveLimit = false; #endif }