Roket_PhysicsJointCorkscrew::Roket_PhysicsJointCorkscrew( NewtonWorld* worldd, irr::core::vector3df point, irr::core::vector3df pin, Roket_PhysicsBody* child, Roket_PhysicsBody* parent, RPhysicsJoint* rjoint) { world = worldd; float pointD[3]; pointD[0] = point.X; pointD[1] = point.Y; pointD[2] = point.Z; float pointP[3]; pointP[0] = pin.X; pointP[1] = pin.Y; pointP[2] = pin.Z; if (parent == NULL) joint = NewtonConstraintCreateCorkscrew(world, &pointD[0], &pointP[0], child->body, NULL); else joint = NewtonConstraintCreateCorkscrew(world, &pointD[0], &pointP[0], child->body, parent->body); NewtonJointSetUserData(joint, &rjoint); NewtonJointSetDestructor(joint, &JointDestructor); }
cPhysicsJointScrewNewton::cPhysicsJointScrewNewton(const tString &asName, iPhysicsBody *apParentBody, iPhysicsBody *apChildBody, iPhysicsWorld *apWorld,const cVector3f &avPivotPoint, const cVector3f avPinDir) : iPhysicsJointNewton<iPhysicsJointScrew>(asName,apParentBody,apChildBody,apWorld,avPivotPoint) { mvPin = avPinDir; mvPin.Normalise(); mpNewtonJoint = NewtonConstraintCreateCorkscrew(mpNewtonWorld, avPivotPoint.v, avPinDir.v, mpNewtonChildBody, mpNewtonParentBody); NewtonJointSetUserData(mpNewtonJoint, (void*) this); NewtonCorkscrewSetUserCallback(mpNewtonJoint,LimitCallback); mfMaxDistance =0; mfMinDistance =0; mvPinDir = avPinDir; mvPivotPoint = avPivotPoint; }