2 //metadoc ODEJoint copyrigth Jonathan Wright, 2006
3 //metadoc ODEJoint license BSD revised
4 /*metadoc ODEJoint description
8 #include "IoODEJoint_internal.h"
9 #include "IoODESlider.h"
10 #include "IoODEBody.h"
13 #include "IoVector_ode.h"
14 #include "GLIncludes.h"
16 /* ----------------------------------------------------------- */
18 IoTag
*IoODESlider_newTag(void *state
)
20 IoTag
*tag
= IoTag_newWithName_("ODESlider");
21 IoTag_state_(tag
, state
);
22 IoTag_freeFunc_(tag
, (IoTagFreeFunc
*)IoODESlider_free
);
23 IoTag_markFunc_(tag
, (IoTagMarkFunc
*)IoODESlider_mark
);
24 IoTag_cloneFunc_(tag
, (IoTagCloneFunc
*)IoODESlider_rawClone
);
28 IoODESlider
*IoODESlider_proto(void *state
)
30 IoObject
*self
= IoObject_new(state
);
31 IoObject_tag_(self
, IoODESlider_newTag(state
));
33 IoODEJoint_protoCommon(self
);
35 IoState_registerProtoWithFunc_(state
, self
, IoODESlider_proto
);
38 IoMethodTable methodTable
[] = {
39 ODE_COMMON_JOINT_METHODS
40 #define PARAM(X, _N, _SETN) \
41 {#_N, IoODESlider_##_N}, \
42 {#_SETN, IoODESlider_##_SETN},
46 {"axis", IoODESlider_axis
},
47 {"setAxis", IoODESlider_setAxis
},
48 {"position", IoODESlider_position
},
49 {"positionRate", IoODESlider_positionRate
},
50 {"addForce", IoODESlider_addForce
},
54 IoObject_addMethodTable_(self
, methodTable
);
59 IoODESlider
*IoODESlider_rawClone(IoODESlider
*proto
)
61 IoObject
*self
= IoODEJoint_rawClone(proto
);
63 if(DATA(proto
)->jointGroup
)
65 IoODEJointGroup
*jointGroup
= DATA(proto
)->jointGroup
;
67 JOINTGROUP
= jointGroup
;
68 IoODEJointGroup_addJoint(jointGroup
, self
);
69 JOINTID
= dJointCreateSlider(WORLDID
, JOINTGROUPID
);
74 void IoODESlider_free(IoODESlider
*self
)
76 IoODEJoint_free(self
);
79 void IoODESlider_mark(IoODESlider
*self
)
81 IoODEJoint_mark(self
);
84 IoODEJoint
*IoODESlider_newProto(void *state
, IoODEJointGroup
*jointGroup
)
86 return IoODEJoint_newProtoCommon(state
, IoODESlider_proto
, jointGroup
);
89 /* ----------------------------------------------------------- */
92 IoObject
*IoODESlider_getParam(IoODESlider
*self
, IoObject
*locals
, IoMessage
*m
, int parameter
)
94 return IoODEJoint_getParam(self
, locals
, m
, parameter
, dJointGetSliderParam
);
97 IoObject
*IoODESlider_setParam(IoODESlider
*self
, IoObject
*locals
, IoMessage
*m
, int parameter
)
99 return IoODEJoint_setParam(self
, locals
, m
, parameter
, dJointSetSliderParam
);
102 #define PARAM(X, _N, _SETN) \
103 IoObject *IoODESlider_##_N(IoODESlider *self, IoObject *locals, IoMessage *m) \
105 return IoODESlider_getParam(self, locals, m, X); \
108 IoObject *IoODESlider_##_SETN(IoODESlider *self, IoObject *locals, IoMessage *m) \
110 return IoODESlider_setParam(self, locals, m, X); \
115 IoObject
*IoODESlider_axis(IoODESlider
*self
, IoObject
*locals
, IoMessage
*m
)
117 return IoODEJoint_getVector3(self
, locals
, m
, dJointGetSliderAxis
);
120 IoObject
*IoODESlider_position(IoODESlider
*self
, IoObject
*locals
, IoMessage
*m
)
122 return IoODEJoint_getReal(self
, locals
, m
, dJointGetSliderPosition
);
125 IoObject
*IoODESlider_positionRate(IoODESlider
*self
, IoObject
*locals
, IoMessage
*m
)
127 return IoODEJoint_getReal(self
, locals
, m
, dJointGetSliderPositionRate
);
131 IoObject
*IoODESlider_setAxis(IoODESlider
*self
, IoObject
*locals
, IoMessage
*m
)
133 return IoODEJoint_setVector3(self
, locals
, m
, dJointSetSliderAxis
);
136 IoObject
*IoODESlider_addForce(IoODESlider
*self
, IoObject
*locals
, IoMessage
*m
)
138 return IoODEJoint_setReal(self
, locals
, m
, dJointAddSliderForce
);