Files
RCBASIC4/rcbasic_runtime/rc_constraint.h
2025-07-08 21:17:11 -05:00

1977 lines
63 KiB
C
Executable File

#ifndef RC_CONSTRAINT_H_INCLUDED
#define RC_CONSTRAINT_H_INCLUDED
int getConstraintId()
{
int cid = -1;
for(int i = 0; i < rc_physics3D.constraints.size(); i++)
{
if(rc_physics3D.constraints[i].type <= 0)
{
cid = i;
break;
}
}
if(cid >= 0)
return cid;
rc_constraint_obj constraint;
cid = rc_physics3D.constraints.size();
rc_physics3D.constraints.push_back(constraint);
return cid;
}
int rc_createPointConstraint(int actorA, double pxA, double pyA, double pzA)
{
if(actorA < 0 || actorA >= rc_actor.size())
return -1;
if(rc_actor[actorA].physics.rigid_body)
{
rc_constraint_obj p2p;
p2p.type = RC_CONSTRAINT_TYPE_POINT;
btVector3 pvtA(pxA, pyA, pzA);
p2p.constraint = new btPoint2PointConstraint(*rc_actor[actorA].physics.rigid_body->getPointer(), pvtA);
rc_physics3D.world->getPointer()->addConstraint(p2p.constraint);
int constraint_id = getConstraintId();
rc_physics3D.constraints[constraint_id] = p2p;
return constraint_id;
}
return -1;
}
int rc_createPointConstraintEx(int actorA, int actorB, double pxA, double pyA, double pzA, double pxB, double pyB, double pzB)
{
if(actorA < 0 || actorA >= rc_actor.size() || actorB < 0 || actorB >= rc_actor.size())
return -1;
if(rc_actor[actorA].physics.rigid_body && rc_actor[actorB].physics.rigid_body)
{
rc_constraint_obj p2p;
p2p.type = RC_CONSTRAINT_TYPE_POINT;
btVector3 pvtA(pxA, pyA, pzA);
btVector3 pvtB(pxB, pyB, pzB);
p2p.constraint = new btPoint2PointConstraint(*rc_actor[actorA].physics.rigid_body->getPointer(), *rc_actor[actorB].physics.rigid_body->getPointer(),
pvtA, pvtB);
rc_physics3D.world->getPointer()->addConstraint(p2p.constraint);
int constraint_id = getConstraintId();
rc_physics3D.constraints[constraint_id] = p2p;
return constraint_id;
}
return -1;
}
void rc_setPointPivotA(int constraint_id, double x, double y, double z)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT)
{
btPoint2PointConstraint* c = (btPoint2PointConstraint*)rc_physics3D.constraints[constraint_id].constraint;
c->setPivotA(btVector3(x, y, z));
}
}
void rc_setPointPivotB(int constraint_id, double x, double y, double z)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT)
{
btPoint2PointConstraint* c = (btPoint2PointConstraint*)rc_physics3D.constraints[constraint_id].constraint;
c->setPivotB(btVector3(x, y, z));
}
}
int rc_createHingeConstraint(int actorA, int frameInA_matrix, bool useReferenceFrameA)
{
if(actorA < 0 || actorA >= rc_actor.size())
return -1;
if(rc_actor[actorA].physics.rigid_body)
{
rc_constraint_obj hinge;
hinge.type = RC_CONSTRAINT_TYPE_HINGE;
irr::core::matrix4 irr_matA = rc_convertToIrrMatrix(frameInA_matrix);
btTransform frameInA;
btTransformFromIrrlichtMatrix(irr_matA, frameInA);
hinge.constraint = new btHingeConstraint(*rc_actor[actorA].physics.rigid_body->getPointer(), frameInA, useReferenceFrameA);
rc_physics3D.world->getPointer()->addConstraint(hinge.constraint);
int constraint_id = getConstraintId();
rc_physics3D.constraints[constraint_id] = hinge;
return constraint_id;
}
return -1;
}
int rc_createHingeConstraintEx(int actorA, int actorB, int frameInA_matrix, int frameInB_matrix, bool useReferenceFrameA)
{
if(actorA < 0 || actorA >= rc_actor.size() || actorB < 0 || actorB >= rc_actor.size())
return -1;
if(rc_actor[actorA].physics.rigid_body && rc_actor[actorB].physics.rigid_body)
{
rc_constraint_obj hinge;
hinge.type = RC_CONSTRAINT_TYPE_HINGE;
irr::core::matrix4 irr_matA = rc_convertToIrrMatrix(frameInA_matrix);
irr::core::matrix4 irr_matB = rc_convertToIrrMatrix(frameInB_matrix);
btTransform frameInA, frameInB;
btTransformFromIrrlichtMatrix(irr_matA, frameInA);
btTransformFromIrrlichtMatrix(irr_matB, frameInB);
hinge.constraint = new btHingeConstraint(*rc_actor[actorA].physics.rigid_body->getPointer(), *rc_actor[actorB].physics.rigid_body->getPointer(), frameInA, frameInB, useReferenceFrameA);
rc_physics3D.world->getPointer()->addConstraint(hinge.constraint);
int constraint_id = getConstraintId();
rc_physics3D.constraints[constraint_id] = hinge;
return constraint_id;
}
return -1;
}
int rc_createSlideConstraint(int actorA, int frameInB_matrix, bool useLinearReferenceFrameA)
{
if(actorA < 0 || actorA >= rc_actor.size())
return -1;
if(rc_actor[actorA].physics.rigid_body)
{
rc_constraint_obj slide;
slide.type = RC_CONSTRAINT_TYPE_SLIDER;
irr::core::matrix4 irr_mat = rc_convertToIrrMatrix(frameInB_matrix);
btTransform frameInB;
btTransformFromIrrlichtMatrix(irr_mat, frameInB);
slide.constraint = new btSliderConstraint(*rc_actor[actorA].physics.rigid_body->getPointer(), frameInB, useLinearReferenceFrameA);
rc_physics3D.world->getPointer()->addConstraint(slide.constraint);
int constraint_id = getConstraintId();
rc_physics3D.constraints[constraint_id] = slide;
return constraint_id;
}
return -1;
}
int rc_createSlideConstraintEx(int actorA, int actorB, int frameInA_matrix, int frameInB_matrix, bool useLinearReferenceFrameA)
{
if(actorA < 0 || actorA >= rc_actor.size() || actorB < 0 || actorB >= rc_actor.size())
return -1;
if(rc_actor[actorA].physics.rigid_body && rc_actor[actorB].physics.rigid_body)
{
rc_constraint_obj slide;
slide.type = RC_CONSTRAINT_TYPE_SLIDER;
irr::core::matrix4 irr_matA = rc_convertToIrrMatrix(frameInA_matrix);
irr::core::matrix4 irr_matB = rc_convertToIrrMatrix(frameInB_matrix);
btTransform frameInA, frameInB;
btTransformFromIrrlichtMatrix(irr_matA, frameInA);
btTransformFromIrrlichtMatrix(irr_matB, frameInB);
slide.constraint = new btSliderConstraint(*rc_actor[actorA].physics.rigid_body->getPointer(), *rc_actor[actorB].physics.rigid_body->getPointer(), frameInA, frameInB, useLinearReferenceFrameA);
rc_physics3D.world->getPointer()->addConstraint(slide.constraint);
int constraint_id = getConstraintId();
rc_physics3D.constraints[constraint_id] = slide;
return constraint_id;
}
return -1;
}
int rc_createConeConstraint(int actorA, int rbAFrame_matrix)
{
if(actorA < 0 || actorA >= rc_actor.size())
return -1;
if(rc_actor[actorA].physics.rigid_body)
{
rc_constraint_obj cone;
cone.type = RC_CONSTRAINT_TYPE_CONE;
irr::core::matrix4 irr_matA = rc_convertToIrrMatrix(rbAFrame_matrix);
btTransform rba;
btTransformFromIrrlichtMatrix(irr_matA, rba);
cone.constraint = new btConeTwistConstraint(*rc_actor[actorA].physics.rigid_body->getPointer(), rba);
rc_physics3D.world->getPointer()->addConstraint(cone.constraint);
int constraint_id = getConstraintId();
rc_physics3D.constraints[constraint_id] = cone;
return constraint_id;
}
return -1;
}
int rc_createConeConstraintEx(int actorA, int actorB, int rbAFrame_matrix, int rbBFrame_matrix)
{
if(actorA < 0 || actorA >= rc_actor.size() || actorB < 0 || actorB >= rc_actor.size())
return -1;
if(rc_actor[actorA].physics.rigid_body && rc_actor[actorB].physics.rigid_body)
{
rc_constraint_obj cone;
cone.type = RC_CONSTRAINT_TYPE_CONE;
irr::core::matrix4 irr_matA = rc_convertToIrrMatrix(rbAFrame_matrix);
irr::core::matrix4 irr_matB = rc_convertToIrrMatrix(rbBFrame_matrix);
btTransform rba, rbb;
btTransformFromIrrlichtMatrix(irr_matA, rba);
btTransformFromIrrlichtMatrix(irr_matB, rbb);
cone.constraint = new btConeTwistConstraint(*rc_actor[actorA].physics.rigid_body->getPointer(), *rc_actor[actorB].physics.rigid_body->getPointer(), rba, rbb);
rc_physics3D.world->getPointer()->addConstraint(cone.constraint);
int constraint_id = getConstraintId();
rc_physics3D.constraints[constraint_id] = cone;
return constraint_id;
}
return -1;
}
void rc_deleteConstraint(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].constraint)
{
rc_physics3D.world->getPointer()->removeConstraint(rc_physics3D.constraints[constraint_id].constraint);
rc_physics3D.constraints[constraint_id].constraint = NULL;
rc_physics3D.constraints[constraint_id].type = 0;
}
}
bool rc_constraintExists(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return false;
if(rc_physics3D.constraints[constraint_id].constraint)
return true;
return false;
}
void rc_getConstraintFrameOffsetA(int constraint_id, double* x, double* y, double* z, double* rx, double* ry, double* rz)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
*x = 0;
*y = 0;
*z = 0;
*rx = 0;
*ry = 0;
*rz = 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*)rc_physics3D.constraints[constraint_id].constraint;
//btTransform t = hinge->getFrameOffsetA();
//t.getBasis().getEulerZYX()
*x = hinge->getFrameOffsetA().getOrigin().getX();
*y = hinge->getFrameOffsetA().getOrigin().getY();
*z = hinge->getFrameOffsetA().getOrigin().getZ();
btScalar yaw, pitch, roll;
hinge->getFrameOffsetA().getBasis().getEulerZYX(yaw, pitch, roll);
*rx = rc_util_degrees(roll);
*ry = rc_util_degrees(pitch);
*rz = rc_util_degrees(yaw);
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*)rc_physics3D.constraints[constraint_id].constraint;
*x = cone->getFrameOffsetA().getOrigin().getX();
*y = cone->getFrameOffsetA().getOrigin().getY();
*z = cone->getFrameOffsetA().getOrigin().getZ();
btScalar yaw, pitch, roll;
cone->getFrameOffsetA().getBasis().getEulerZYX(yaw, pitch, roll);
*rx = rc_util_degrees(roll);
*ry = rc_util_degrees(pitch);
*rz = rc_util_degrees(yaw);
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*)rc_physics3D.constraints[constraint_id].constraint;
*x = slide->getFrameOffsetA().getOrigin().getX();
*y = slide->getFrameOffsetA().getOrigin().getY();
*z = slide->getFrameOffsetA().getOrigin().getZ();
btScalar yaw, pitch, roll;
slide->getFrameOffsetA().getBasis().getEulerZYX(yaw, pitch, roll);
*rx = rc_util_degrees(roll);
*ry = rc_util_degrees(pitch);
*rz = rc_util_degrees(yaw);
}
}
void rc_getConstraintFrameOffsetB(int constraint_id, double* x, double* y, double* z, double* rx, double* ry, double* rz)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
*x = 0;
*y = 0;
*z = 0;
*rx = 0;
*ry = 0;
*rz = 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*)rc_physics3D.constraints[constraint_id].constraint;
*x = hinge->getFrameOffsetB().getOrigin().getX();
*y = hinge->getFrameOffsetB().getOrigin().getY(); btTransform:
*z = hinge->getFrameOffsetB().getOrigin().getZ();
btScalar yaw, pitch, roll;
hinge->getFrameOffsetB().getBasis().getEulerZYX(yaw, pitch, roll);
*rx = rc_util_degrees(roll);
*ry = rc_util_degrees(pitch);
*rz = rc_util_degrees(yaw);
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*)rc_physics3D.constraints[constraint_id].constraint;
*x = cone->getFrameOffsetB().getOrigin().getX();
*y = cone->getFrameOffsetB().getOrigin().getY();
*z = cone->getFrameOffsetB().getOrigin().getZ();
btScalar yaw, pitch, roll;
cone->getFrameOffsetB().getBasis().getEulerZYX(yaw, pitch, roll);
*rx = rc_util_degrees(roll);
*ry = rc_util_degrees(pitch);
*rz = rc_util_degrees(yaw);
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*)rc_physics3D.constraints[constraint_id].constraint;
*x = slide->getFrameOffsetB().getOrigin().getX();
*y = slide->getFrameOffsetB().getOrigin().getY();
*z = slide->getFrameOffsetB().getOrigin().getZ();
btScalar yaw, pitch, roll;
slide->getFrameOffsetB().getBasis().getEulerZYX(yaw, pitch, roll);
*rx = rc_util_degrees(roll);
*ry = rc_util_degrees(pitch);
*rz = rc_util_degrees(yaw);
}
}
void rc_useConstraintFrameOffset(int constraint_id, bool flag)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
hinge->setUseFrameOffset(flag);
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setUseFrameOffset(flag);
}
}
//btHingeConstraint::getHingeAngle()
double rc_getHingeAngle(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return rc_util_degrees(hinge->getHingeAngle());
}
return 0;
}
double rc_getHingeAngleEx(int constraint_id, int t_matrixA, int t_matrixB)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btTransform transformA, transformB;
irr::core::matrix4 irr_matA = rc_convertToIrrMatrix(t_matrixA);
irr::core::matrix4 irr_matB = rc_convertToIrrMatrix(t_matrixB);
btTransformFromIrrlichtMatrix(irr_matA, transformA);
btTransformFromIrrlichtMatrix(irr_matB, transformB);
return rc_util_degrees(hinge->getHingeAngle(transformA, transformB));
}
return 0;
}
//btHingeConstraint::getBreakingImpulseThreshold()
double rc_getConstraintBreakingImpulseThreshold(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return hinge->getBreakingImpulseThreshold();
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT)
{
btPoint2PointConstraint* p2p = (btPoint2PointConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return p2p->getBreakingImpulseThreshold();
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return cone->getBreakingImpulseThreshold();
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getBreakingImpulseThreshold();
}
return 0;
}
//btHingeConstraint::getAFrame()
int rc_getConstraintAFrame(int constraint_id, int mA)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return -1;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btTransform aframe = hinge->getAFrame();
irr::core::matrix4 irr_mat;
btTransformToIrrlichtMatrix(aframe, irr_mat);
mA = rc_convertFromIrrMatrix(irr_mat, mA);
return mA;
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btTransform aframe = cone->getAFrame();
irr::core::matrix4 irr_mat;
btTransformToIrrlichtMatrix(aframe, irr_mat);
mA = rc_convertFromIrrMatrix(irr_mat, mA);
return mA;
}
return -1;
}
//btHingeConstraint::getBFrame()
int rc_getConstraintBFrame(int constraint_id, int mA)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return -1;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btTransform bframe = hinge->getBFrame();
irr::core::matrix4 irr_mat;
btTransformToIrrlichtMatrix(bframe, irr_mat);
mA = rc_convertFromIrrMatrix(irr_mat, mA);
return mA;
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btTransform bframe = cone->getBFrame();
irr::core::matrix4 irr_mat;
btTransformToIrrlichtMatrix(bframe, irr_mat);
mA = rc_convertFromIrrMatrix(irr_mat, mA);
return mA;
}
return -1;
}
//btHingeConstraint::setAxis()
void rc_setHingeAxis(int constraint_id, double x, double y, double z)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btVector3 axis(x,y,z);
hinge->setAxis(axis);
}
}
//btHingeConstraint::setBreakingImpulseThreshold()
void rc_setConstraintBreakingImpulseThreshold(int constraint_id, double threshold)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
hinge->setBreakingImpulseThreshold(threshold);
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT)
{
btPoint2PointConstraint* p2p = (btPoint2PointConstraint*) rc_physics3D.constraints[constraint_id].constraint;
p2p->setBreakingImpulseThreshold(threshold);
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
cone->setBreakingImpulseThreshold(threshold);
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setBreakingImpulseThreshold(threshold);
}
}
//btHingeConstraint::setFrames()
void rc_setConstraintFrames(int constraint_id, int frameA_matrix, int frameB_matrix)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btTransform frameA, frameB;
irr::core::matrix4 irr_matA, irr_matB;
irr_matA = rc_convertToIrrMatrix(frameA_matrix);
irr_matB = rc_convertToIrrMatrix(frameB_matrix);
btTransformFromIrrlichtMatrix(irr_matA, frameA);
btTransformFromIrrlichtMatrix(irr_matB, frameB);
hinge->setFrames(frameA, frameB);
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btTransform frameA, frameB;
irr::core::matrix4 irr_matA, irr_matB;
irr_matA = rc_convertToIrrMatrix(frameA_matrix);
irr_matB = rc_convertToIrrMatrix(frameB_matrix);
btTransformFromIrrlichtMatrix(irr_matA, frameA);
btTransformFromIrrlichtMatrix(irr_matB, frameB);
cone->setFrames(frameA, frameB);
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btTransform frameA, frameB;
irr::core::matrix4 irr_matA, irr_matB;
irr_matA = rc_convertToIrrMatrix(frameA_matrix);
irr_matB = rc_convertToIrrMatrix(frameB_matrix);
btTransformFromIrrlichtMatrix(irr_matA, frameA);
btTransformFromIrrlichtMatrix(irr_matB, frameB);
slide->setFrames(frameA, frameB);
}
}
//btHingeConstraint::setLimit();
void rc_setHingeLimit(int constraint_id, double low, double high, double softness, double bias_factor, double relaxation_factor)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
hinge->setLimit(rc_util_radians(low), rc_util_radians(high), softness, bias_factor, relaxation_factor);
}
}
void rc_setConeLimit(int constraint_id, double swingSpan1, double swingSpan2, double twistSpan, double softness, double bias_factor, double relaxation_factor)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
cone->setLimit(rc_util_radians(swingSpan1), rc_util_radians(swingSpan2), rc_util_radians(twistSpan), softness, bias_factor, relaxation_factor);
}
}
//btHingeConstraint::getLimitBiasFactor()
double rc_getHingeLimitBiasFactor(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return hinge->getLimitBiasFactor();
}
return 0;
}
//btHingeConstraint::getLimitRelaxationFactor()
double rc_getHingeLimitRelaxationFactor(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return hinge->getLimitRelaxationFactor();
}
return 0;
}
//btHingeConstraint::getLimitSign()
double rc_getHingeLimitSign(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return hinge->getLimitSign();
}
return 0;
}
//btHingeConstraint::getSolveLimit()
int rc_getHingeSolveLimit(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return hinge->getSolveLimit();
}
return 0;
}
//btHingeConstraint::setUseReferenceFrameA()
void rc_useHingeReferenceFrameA(int constraint_id, bool flag)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
hinge->setUseReferenceFrameA(flag);
}
}
//
//btPoint2PointConstraint::getAppliedImpulse()
double rc_getConstraintAppliedImpulse(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return hinge->getAppliedImpulse();
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT)
{
btPoint2PointConstraint* p2p = (btPoint2PointConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return p2p->getAppliedImpulse();
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return cone->getAppliedImpulse();
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getAppliedImpulse();
}
return 0;
}
//btPoint2PointConstraint::getFixedBody()
int rc_getConstraintFixedActor(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return -1;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btRigidBody body = hinge->getFixedBody();
SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer();
return identification->getId();
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT)
{
btPoint2PointConstraint* p2p = (btPoint2PointConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btRigidBody body = p2p->getFixedBody();
SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer();
return identification->getId();
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btRigidBody body = cone->getFixedBody();
SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer();
return identification->getId();
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btRigidBody body = slide->getFixedBody();
SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer();
return identification->getId();
}
return -1;
}
//btPoint2PointConstraint::getPivotInA()
void rc_getPointPivotA(int constraint_id, double* x, double* y, double* z)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
*x = 0;
*y = 0;
*z = 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT)
{
btPoint2PointConstraint* p2p = (btPoint2PointConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btVector3 pivot = p2p->getPivotInA();
*x = pivot.getX();
*y = pivot.getY();
*z = pivot.getZ();
}
}
//btPoint2PointConstraint::getPivotInB()
void rc_getPointPivotB(int constraint_id, double* x, double* y, double* z)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
*x = 0;
*y = 0;
*z = 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT)
{
btPoint2PointConstraint* p2p = (btPoint2PointConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btVector3 pivot = p2p->getPivotInB();
*x = pivot.getX();
*y = pivot.getY();
*z = pivot.getZ();
}
}
//btPoint2PointConstraint::getRigidBodyA()
int rc_getConstraintActorA(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return -1;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btRigidBody body = hinge->getRigidBodyA();
SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer();
return identification->getId();
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT)
{
btPoint2PointConstraint* p2p = (btPoint2PointConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btRigidBody body = p2p->getRigidBodyA();
SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer();
return identification->getId();
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btRigidBody body = cone->getRigidBodyA();
SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer();
return identification->getId();
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btRigidBody body = slide->getRigidBodyA();
SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer();
return identification->getId();
}
return -1;
}
//btPoint2PointConstraint::getRigidBodyB()
int rc_getConstraintActorB(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return -1;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btRigidBody body = hinge->getRigidBodyB();
SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer();
return identification->getId();
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT)
{
btPoint2PointConstraint* p2p = (btPoint2PointConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btRigidBody body = p2p->getRigidBodyB();
SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer();
return identification->getId();
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btRigidBody body = cone->getRigidBodyB();
SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer();
return identification->getId();
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btRigidBody body = slide->getRigidBodyB();
SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer();
return identification->getId();
}
return -1;
}
//btPoint2PointConstraint::setOverrideNumSolverIterations()
void rc_setConstraintSolverIterations(int constraint_id, int num)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
hinge->setOverrideNumSolverIterations(num);
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT)
{
btPoint2PointConstraint* p2p = (btPoint2PointConstraint*) rc_physics3D.constraints[constraint_id].constraint;
p2p->setOverrideNumSolverIterations(num);
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
cone->setOverrideNumSolverIterations(num);
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setOverrideNumSolverIterations(num);
}
}
//
//btConeTwistConstraint::getBiasFactor()
double rc_getConeBiasFactor(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return cone->getBiasFactor();
}
return 0;
}
//btConeTwistConstraint::getDamping()
double rc_getConeDamping(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return cone->getDamping();
}
return 0;
}
//btConeTwistConstraint::getFixThresh()
double rc_getConeFixThresh(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return cone->getFixThresh();
}
return 0;
}
//btConeTwistConstraint::getLimit()
double rc_getConeLimit(int constraint_id, int limit_index)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return rc_util_degrees(cone->getLimit(limit_index));
}
return 0;
}
//btConeTwistConstraint::getLimitSoftness()
double rc_getConstraintLimitSoftness(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return hinge->getLimitSoftness();
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return cone->getLimitSoftness();
}
return 0;
}
//btConeTwistConstraint::getOverrideNumSolverIterations()
double rc_getConstraintSolverIterations(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return hinge->getOverrideNumSolverIterations();
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT)
{
btPoint2PointConstraint* p2p = (btPoint2PointConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return p2p->getOverrideNumSolverIterations();
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return cone->getOverrideNumSolverIterations();
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getOverrideNumSolverIterations();
}
return 0;
}
//btConeTwistConstraint::GetPointForAngle()
void rc_getConeAnglePoint(int constraint_id, double angle, double len, double* x, double* y, double* z)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btVector3 v = cone->GetPointForAngle( radians(angle), len);
*x = v.getX();
*y = v.getY();
*z = v.getZ();
}
}
//btConeTwistConstraint::getAngularOnly()
bool rc_getConstraintAngularOnly(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return false;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return hinge->getAngularOnly();
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return cone->getAngularOnly();
}
return false;
}
//btConeTwistConstraint::getSolveSwingLimit()
int rc_getConeSolveSwingLimit(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return cone->getSolveSwingLimit();
}
return 0;
}
int rc_getConeSolveTwistLimit(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return cone->getSolveTwistLimit();
}
return 0;
}
//btConeTwistConstraint::getSwingSpan1()
double rc_getConeSwingSpan1(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return rc_util_degrees(cone->getSwingSpan1());
}
return 0;
}
//btConeTwistConstraint::getSwingSpan2()
int rc_getConeSwingSpan2(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return rc_util_degrees(cone->getSwingSpan2());
}
return 0;
}
//btConeTwistConstraint::getTwistAngle()
double rc_getConeTwistAngle(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return rc_util_degrees(cone->getTwistAngle());
}
return 0;
}
//btConeTwistConstraint::getTwistLimitSign()
double rc_getConeTwistLimitSign(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return cone->getTwistLimitSign();
}
return 0;
}
//btConeTwistConstraint::getTwistSpan()
int rc_getConeTwistSpan(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return rc_util_degrees(cone->getTwistSpan());
}
return 0;
}
//btConeTwistConstraint::setAngularOnly()
void rc_setConstraintAngularOnly(int constraint_id, bool flag)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE)
{
btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint;
hinge->setAngularOnly(flag);
}
else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
cone->setAngularOnly(flag);
}
}
//btConeTwistConstraint::setDamping()
void rc_setConeDamping(int constraint_id, double damping)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
cone->setDamping(damping);
}
}
//btConeTwistConstraint::setFixThresh()
void rc_setConeFixThresh(int constraint_id, double fixThresh)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE)
{
btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint;
cone->setFixThresh(fixThresh);
}
}
//btSliderConstraint::getAncorInA()
void rc_getSlideAnchorA(int constraint_id, double* x, double* y, double* z)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
*x = 0;
*y = 0;
*z = 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btVector3 v = slide->getAncorInA();
*x = v.getX();
*y = v.getY();
*z = v.getZ();
}
}
//btSliderConstraint::getAncorInB()
void rc_getSlideAnchorB(int constraint_id, double* x, double* y, double* z)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
*x = 0;
*y = 0;
*z = 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
btVector3 v = slide->getAncorInB();
*x = v.getX();
*y = v.getY();
*z = v.getZ();
}
}
//btSliderConstraint::getAngDepth()
double rc_getSlideAngDepth(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return rc_util_degrees(slide->getAngDepth());
}
return 0;
}
//btSliderConstraint::getAngularPos()
double rc_getSlideAngularPos(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return rc_util_degrees(slide->getAngularPos());
}
return 0;
}
//btSliderConstraint::getDampingDirAng()
double rc_getSlideDampingDirAng(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return rc_util_degrees(slide->getDampingDirAng());
}
return 0;
}
//btSliderConstraint::getDampingDirLin()
double rc_getSlideDampingDirLin(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getDampingDirLin();
}
return 0;
}
//btSliderConstraint::getDampingLimAng()
double rc_getSlideDampingLimAng(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return rc_util_degrees(slide->getDampingLimAng());
}
return 0;
}
//btSliderConstraint::getDampingLimLin()
double rc_getSlideDampingLimLin(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getDampingLimLin();
}
return 0;
}
//btSliderConstraint::getDampingOrthoAng()
double rc_getSlideDampingOrthoAng(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return rc_util_degrees(slide->getDampingOrthoAng());
}
return 0;
}
//btSliderConstraint::getDampingOrthoLin()
double rc_getSlideDampingOrthoLin(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getDampingOrthoLin();
}
return 0;
}
//btSliderConstraint::getLinearPos()
double rc_getSlideLinearPos(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getLinearPos();
}
return 0;
}
//btSliderConstraint::getLinDepth()
double rc_getSlideLinDepth(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getLinDepth();
}
return 0;
}
//btSliderConstraint::getLowerAngLimit()
double rc_getSlideLowerAngLimit(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return rc_util_degrees(slide->getLowerAngLimit());
}
return 0;
}
//btSliderConstraint::getLowerLinLimit()
double rc_getSlideLowerLinLimit(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getLowerLinLimit();
}
return 0;
}
//btSliderConstraint::getRestitutionDirAng()
double rc_getSlideRestitutionDirAng(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getRestitutionDirAng();
}
return 0;
}
//btSliderConstraint::getRestitutionDirLin()
double rc_getSlideRestitutionDirLin(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getRestitutionDirLin();
}
return 0;
}
//btSliderConstraint::getRestitutionLimAng()
double rc_getSlideRestitutionLimAng(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getRestitutionLimAng();
}
return 0;
}
//btSliderConstraint::getRestitutionLimLin()
double rc_getSlideRestitutionLimLin(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getRestitutionLimLin();
}
return 0;
}
//btSliderConstraint::getRestitutionOrthoAng()
double rc_getSlideRestitutionOrthoAng(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getRestitutionOrthoAng();
}
return 0;
}
//btSliderConstraint::getRestitutionOrthoLin()
double rc_getSlideRestitutionOrthoLin(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getRestitutionOrthoLin();
}
return 0;
}
//btSliderConstraint::getSoftnessDirAng()
double rc_getSlideSoftnessDirAng(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getSoftnessDirAng();
}
return 0;
}
//btSliderConstraint::getSoftnessDirLin()
double rc_getSlideSoftnessDirLin(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getSoftnessDirLin();
}
return 0;
}
//btSliderConstraint::getSoftnessLimAng()
double rc_getSlideSoftnessLimAng(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getSoftnessLimAng();
}
return 0;
}
//btSliderConstraint::getSoftnessLimLin()
double rc_getSlideSoftnessLimLin(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getSoftnessLimLin();
}
return 0;
}
//btSliderConstraint::getSoftnessOrthoAng()
double rc_getSlideSoftnessOrthoAng(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getSoftnessOrthoAng();
}
return 0;
}
//btSliderConstraint::getSoftnessOrthoLin()
double rc_getSlideSoftnessOrthoLin(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getSoftnessOrthoLin();
}
return 0;
}
//btSliderConstraint::getSolveAngLimit()
bool rc_getSlideSolveAngLimit(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return rc_util_degrees(slide->getSolveAngLimit());
}
return 0;
}
//btSliderConstraint::getSolveLinLimit()
bool rc_getSlideSolveLinLimit(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getSolveLinLimit();
}
return 0;
}
//btSliderConstraint::getUpperAngLimit()
double rc_getSlideUpperAngLimit(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return rc_util_degrees(slide->getUpperAngLimit());
}
return 0;
}
//btSliderConstraint::getUpperLinLimit()
double rc_getSlideUpperLinLimit(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getUpperLinLimit();
}
return 0;
}
//btSliderConstraint::getUseFrameOffset()
bool rc_getSlideUseFrameOffset(int constraint_id)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return 0;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
return slide->getUseFrameOffset();
}
return 0;
}
//btSliderConstraint::setDampingDirAng()
void rc_setSlideDampingDirAng(int constraint_id, double n)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setDampingDirAng(rc_util_radians(n));
}
}
//btSliderConstraint::setDampingDirLin()
void rc_setSlideDampingDirLin(int constraint_id, double n)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setDampingDirLin(n);
}
}
//btSliderConstraint::setDampingLimAng()
void rc_setSlideDampingLimAng(int constraint_id, double n)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setDampingLimAng(rc_util_radians(n));
}
}
//btSliderConstraint::setDampingLimLin()
void rc_setSlideDampingLimLin(int constraint_id, double n)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setDampingLimLin(n);
}
}
//btSliderConstraint::setDampingOrthoAng()
void rc_setSlideDampingOrthoAng(int constraint_id, double n)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setDampingOrthoAng(rc_util_radians(n));
}
}
//btSliderConstraint::setDampingOrthoLin()
void rc_setSlideDampingOrthoLin(int constraint_id, double n)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setDampingOrthoLin(n);
}
}
//btSliderConstraint::setLowerAngLimit()
void rc_setSlideLowerAngLimit(int constraint_id, double n)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setLowerAngLimit(rc_util_radians(n));
}
}
//btSliderConstraint::setLowerLinLimit()
void rc_setSlideLowerLinLimit(int constraint_id, double n)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setLowerLinLimit(n);
}
}
//btSliderConstraint::setRestitutionDirAng()
void rc_setSlideRestitutionDirAng(int constraint_id, double n)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setRestitutionDirAng(n);
}
}
//btSliderConstraint::setRestitutionDirLin()
void rc_setSlideRestitutionDirLin(int constraint_id, double n)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setRestitutionDirLin(n);
}
}
//btSliderConstraint::setRestitutionLimAng()
void rc_setSlideRestitutionLimAng(int constraint_id, double n)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setRestitutionLimAng(n);
}
}
//btSliderConstraint::setRestitutionLimLin()
void rc_setSlideRestitutionLimLin(int constraint_id, double n)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setRestitutionLimLin(n);
}
}
//btSliderConstraint::setRestitutionOrthoAng()
void rc_setSlideRestitutionOrthoAng(int constraint_id, double n)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setRestitutionOrthoAng(n);
}
}
//btSliderConstraint::setRestitutionOrthoLin()
void rc_setSlideRestitutionOrthoLin(int constraint_id, double n)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setRestitutionOrthoLin(n);
}
}
//btSliderConstraint::setSoftnessDirAng()
void rc_setSlideSoftnessDirAng(int constraint_id, double n)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setSoftnessDirAng(n);
}
}
//btSliderConstraint::setSoftnessDirLin()
void rc_setSlideSoftnessDirLin(int constraint_id, double n)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setSoftnessDirLin(n);
}
}
//btSliderConstraint::setSoftnessLimAng()
void rc_setSlideSoftnessLimAng(int constraint_id, double n)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setSoftnessLimAng(n);
}
}
//btSliderConstraint::setSoftnessLimLin()
void rc_setSlideSoftnessLimLin(int constraint_id, double n)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setSoftnessLimLin(n);
}
}
//btSliderConstraint::setSoftnessOrthoAng()
void rc_setSlideSoftnessOrthoAng(int constraint_id, double n)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setSoftnessOrthoAng(n);
}
}
//btSliderConstraint::setSoftnessOrthoLin()
void rc_setSlideSoftnessOrthoLin(int constraint_id, double n)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setSoftnessOrthoLin(n);
}
}
//btSliderConstraint::setUpperAngLimit()
void rc_setSlideUpperAngLimit(int constraint_id, double n)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setUpperAngLimit(rc_util_radians(n));
}
}
//btSliderConstraint::setUpperLinLimit()
void rc_setSlideUpperLinLimit(int constraint_id, double n)
{
if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size())
return;
if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER)
{
btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint;
slide->setUpperLinLimit(n);
}
}
#endif // RC_CONSTRAINT_H_INCLUDED