static float get_phys_joint_attr(dJointID j, int p) { switch (dJointGetType(j)) { case dJointTypeHinge: return (float) dJointGetHingeParam (j, p); case dJointTypeSlider: return (float) dJointGetSliderParam (j, p); case dJointTypeHinge2: return (float) dJointGetHinge2Param (j, p); case dJointTypeUniversal: return (float) dJointGetUniversalParam(j, p); default: return 0.0f; } }
void PhysicsSliderJoint::changed(ConstFieldMaskArg whichField, UInt32 origin, BitVector details) { //Do not respond to changes that have a Sync origin if(origin & ChangedOrigin::Sync) { return; } if(whichField & WorldFieldMask) { if(_JointID) { dJointDestroy(_JointID); _JointID = dJointCreateSlider(getWorld()->getWorldID(), 0); } else { _JointID = dJointCreateSlider(getWorld()->getWorldID(), 0); if(!(whichField & HiStopFieldMask)) { setHiStop(dJointGetSliderParam(_JointID,dParamHiStop)); } if(!(whichField & LoStopFieldMask)) { setLoStop(dJointGetSliderParam(_JointID,dParamLoStop)); } if(!(whichField & BounceFieldMask)) { setBounce(dJointGetSliderParam(_JointID,dParamBounce)); } if(!(whichField & CFMFieldMask)) { setCFM(dJointGetSliderParam(_JointID,dParamCFM)); } if(!(whichField & StopCFMFieldMask)) { setStopCFM(dJointGetSliderParam(_JointID,dParamStopCFM)); } if(!(whichField & StopERPFieldMask)) { setStopERP(dJointGetSliderParam(_JointID,dParamStopERP)); } } } Inherited::changed(whichField, origin, details); if((whichField & AxisFieldMask) || (whichField & WorldFieldMask)) { dJointSetSliderAxis(_JointID, getAxis().x(), getAxis().y(), getAxis().z()); } if((whichField & HiStopFieldMask) || (whichField & WorldFieldMask)) { dJointSetSliderParam(_JointID, dParamHiStop, getHiStop()); } if((whichField & LoStopFieldMask) || (whichField & WorldFieldMask)) { dJointSetSliderParam(_JointID, dParamLoStop, getLoStop()); } if((whichField & BounceFieldMask) || (whichField & WorldFieldMask)) { dJointSetSliderParam(_JointID, dParamBounce, getBounce()); } if((whichField & CFMFieldMask) || (whichField & WorldFieldMask)) { dJointSetSliderParam(_JointID, dParamCFM, getCFM()); } if((whichField & StopERPFieldMask) || (whichField & WorldFieldMask)) { dJointSetSliderParam(_JointID, dParamStopERP, getStopERP()); } if((whichField & StopCFMFieldMask) || (whichField & WorldFieldMask)) { dJointSetSliderParam(_JointID, dParamStopCFM, getStopCFM()); } }
void VelocityMotor::VelocitySensor::updateValue() { data.floatValue = dJointGetType(joint->joint) == dJointTypeHinge ? dJointGetHingeParam(joint->joint, dParamVel) : dJointGetSliderParam(joint->joint, dParamVel); }