00001
00002 #include "PhysicsJointUniversal.h"
00003
00004 #include "PhysicsManager.h"
00005
00006 namespace vrsode
00007 {
00008
00009 PhysicsJointUniversal::PhysicsJointUniversal(VRS::SO<PhysicsBody> p_bodyOne,
00010 VRS::SO<PhysicsBody> p_bodyTwo,
00011 VRS::Vector p_position,
00012 VRS::Vector p_axisOne,
00013 VRS::Vector p_axisTwo)
00014 : PhysicsJoint(p_bodyOne, p_bodyTwo)
00015 {
00016 dBodyID bodyOne;
00017 dBodyID bodyTwo;
00018 p_bodyOne != 0 ? bodyOne = p_bodyOne->bodyId() : bodyOne = 0;
00019 p_bodyTwo != 0 ? bodyTwo = p_bodyTwo->bodyId() : bodyTwo = 0;
00020
00021 setJointId(dJointCreateUniversal(PhysicsManager::get()->worldId(), 0));
00022 dJointAttach(jointId(), bodyOne, bodyTwo);
00023 dJointSetUniversalAxis1(
00024 jointId(), p_axisOne[0], p_axisOne[1], p_axisOne[2]);
00025 dJointSetUniversalAxis2(
00026 jointId(), p_axisTwo[0], p_axisTwo[1], p_axisTwo[2]);
00027 dJointSetUniversalAnchor(
00028 jointId(), p_position[0], p_position[1], p_position[2]);
00029
00030 dJointSetData(jointId(), this);
00031 }
00032
00033 PhysicsJointUniversal::~PhysicsJointUniversal()
00034 {
00035 dJointDestroy(jointId());
00036 }
00037
00038 void
00039 PhysicsJointUniversal::setLowStop(double p_lowStop)
00040 {
00041 dJointSetUniversalParam(jointId(), dParamLoStop, p_lowStop);
00042 }
00043
00044 void
00045 PhysicsJointUniversal::setHighStop(double p_highStop)
00046 {
00047 dJointSetUniversalParam(jointId(), dParamHiStop, p_highStop);
00048 }
00049
00050 void
00051 PhysicsJointUniversal::setMotorVelocity(double p_velocity)
00052 {
00053 dJointSetUniversalParam(jointId(), dParamVel, p_velocity);
00054 }
00055
00056 void
00057 PhysicsJointUniversal::setMotorMaxForce(double p_maxForce)
00058 {
00059 dJointSetUniversalParam(jointId(), dParamFMax, p_maxForce);
00060 }
00061
00062 void
00063 PhysicsJointUniversal::setStopBounce(double p_bounce)
00064 {
00065 dJointSetUniversalParam(jointId(), dParamBounce, p_bounce);
00066 }
00067
00068 void
00069 PhysicsJointUniversal::setCFM(double p_cfm)
00070 {
00071 dJointSetUniversalParam(jointId(), dParamCFM, p_cfm);
00072 }
00073
00074 }