| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- 2659,2804d2658
- <
- < /******************** breakable joint contribution ***********************/
- < extern "C" void dJointSetBreakable (dxJoint *joint, int b) {
- < dAASSERT(joint);
- < if (b) {
- < // we want this joint to be breakable but we must first check if it
- < // was already breakable
- < if (!joint->breakInfo) {
- < // allocate a dxJointBreakInfo struct
- < joint->breakInfo = new dxJointBreakInfo;
- < joint->breakInfo->flags = 0;
- < for (int i = 0; i < 3; i++) {
- < joint->breakInfo->b1MaxF[0] = 0;
- < joint->breakInfo->b1MaxT[0] = 0;
- < joint->breakInfo->b2MaxF[0] = 0;
- < joint->breakInfo->b2MaxT[0] = 0;
- < }
- < joint->breakInfo->callback = 0;
- < }
- < else {
- < // the joint was already breakable
- < return;
- < }
- < }
- < else {
- < // we want this joint to be unbreakable mut we must first check if
- < // it is alreay unbreakable
- < if (joint->breakInfo) {
- < // deallocate the dxJointBreakInfo struct
- < delete joint->breakInfo;
- < joint->breakInfo = 0;
- < }
- < else {
- < // the joint was already unbreakable
- < return;
- < }
- < }
- < }
- <
- < extern "C" void dJointSetBreakCallback (dxJoint *joint, dJointBreakCallback *callbackFunc) {
- < dAASSERT(joint);
- < # ifndef dNODEBUG
- < // only works for a breakable joint
- < if (!joint->breakInfo) {
- < dDebug (0, "dJointSetBreakCallback called on unbreakable joint");
- < }
- < # endif
- < joint->breakInfo->callback = callbackFunc;
- < }
- <
- < extern "C" void dJointSetBreakMode (dxJoint *joint, int mode) {
- < dAASSERT(joint);
- < # ifndef dNODEBUG
- < // only works for a breakable joint
- < if (!joint->breakInfo) {
- < dDebug (0, "dJointSetBreakMode called on unbreakable joint");
- < }
- < # endif
- < joint->breakInfo->flags = mode;
- < }
- <
- < extern "C" int dJointGetBreakMode (dxJoint *joint) {
- < dAASSERT(joint);
- < # ifndef dNODEBUG
- < // only works for a breakable joint
- < if (!joint->breakInfo) {
- < dDebug (0, "dJointGetBreakMode called on unbreakable joint");
- < }
- < # endif
- < return joint->breakInfo->flags;
- < }
- <
- < extern "C" void dJointSetBreakForce (dxJoint *joint, int body, dReal x, dReal y, dReal z) {
- < dAASSERT(joint);
- < # ifndef dNODEBUG
- < // only works for a breakable joint
- < if (!joint->breakInfo) {
- < dDebug (0, "dJointSetBreakForce called on unbreakable joint");
- < }
- < # endif
- < if (body) {
- < joint->breakInfo->b2MaxF[0] = x;
- < joint->breakInfo->b2MaxF[1] = y;
- < joint->breakInfo->b2MaxF[2] = z;
- < }
- < else {
- < joint->breakInfo->b1MaxF[0] = x;
- < joint->breakInfo->b1MaxF[1] = y;
- < joint->breakInfo->b1MaxF[2] = z;
- < }
- < }
- <
- < extern "C" void dJointSetBreakTorque (dxJoint *joint, int body, dReal x, dReal y, dReal z) {
- < dAASSERT(joint);
- < # ifndef dNODEBUG
- < // only works for a breakable joint
- < if (!joint->breakInfo) {
- < dDebug (0, "dJointSetBreakTorque called on unbreakable joint");
- < }
- < # endif
- < if (body) {
- < joint->breakInfo->b2MaxT[0] = x;
- < joint->breakInfo->b2MaxT[1] = y;
- < joint->breakInfo->b2MaxT[2] = z;
- < }
- < else {
- < joint->breakInfo->b1MaxT[0] = x;
- < joint->breakInfo->b1MaxT[1] = y;
- < joint->breakInfo->b1MaxT[2] = z;
- < }
- < }
- <
- < extern "C" int dJointIsBreakable (dxJoint *joint) {
- < dAASSERT(joint);
- < return joint->breakInfo != 0;
- < }
- <
- < extern "C" void dJointGetBreakForce (dxJoint *joint, int body, dReal *force) {
- < dAASSERT(joint);
- < # ifndef dNODEBUG
- < // only works for a breakable joint
- < if (!joint->breakInfo) {
- < dDebug (0, "dJointGetBreakForce called on unbreakable joint");
- < }
- < # endif
- < if (body)
- < for (int i=0; i<3; i++) force[i]=joint->breakInfo->b2MaxF[i];
- < else
- < for (int i=0; i<3; i++) force[i]=joint->breakInfo->b1MaxF[i];
- < }
- <
- < extern "C" void dJointGetBreakTorque (dxJoint *joint, int body, dReal *torque) {
- < dAASSERT(joint);
- < # ifndef dNODEBUG
- < // only works for a breakable joint
- < if (!joint->breakInfo) {
- < dDebug (0, "dJointGetBreakTorque called on unbreakable joint");
- < }
- < # endif
- < if (body)
- < for (int i=0; i<3; i++) torque[i]=joint->breakInfo->b2MaxT[i];
- < else
- < for (int i=0; i<3; i++) torque[i]=joint->breakInfo->b1MaxT[i];
- < }
- < /*************************************************************************/
- <
- \ No newline at end of file
|