NewtonJoint* newton_createhinge(VECTOR* vecPivot, VECTOR* vecAxis, ENTITY* entBody1, ENTITY* entBody2, void* fpCallback)
{
NewtonBody* psBody1 = NULL;
NewtonBody* psBody2 = NULL;
NewtonJoint* psJoint;
float* fpPivot;
float* fpAxis;
/* get Newton bodies */
if (entBody1 != NULL)
{
psBody1 = entBody1->skill99;
}
if (entBody2 != NULL)
{
psBody2 = entBody2->skill99;
}
fpPivot = vectorf(vecPivot);
fpPivot[0] *= QUANTTOMETER;
fpPivot[1] *= QUANTTOMETER;
fpPivot[2] *= QUANTTOMETER;
fpAxis = vectorf(vecAxis);
psJoint = NewtonConstraintCreateHinge (psWorld, fpPivot, fpAxis, psBody1, psBody2);
if (fpCallback != NULL)
{
NewtonHingeSetUserCallback (psJoint, fpCallback);
}
/* store joint pointers in related objects */
if (entBody1 != NULL)
{
entBody1->skill98 = psJoint;
}
if (entBody2 != NULL)
{
entBody2->skill98 = psJoint;
}
}