annotate trunk/chipmunkd/constraints/cpConstraint.d @ 6:707dd4e10c28

ported rest of the constraints (chipmunk 5.3.2)
author Extrawurst
date Thu, 02 Dec 2010 22:26:04 +0100
parents 7ebbd4d05553
children c03a41d47b60
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
1
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
2 // written in the D programming language
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
3
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
4 module chipmunkd.constraints.cpConstraint;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
5
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
6 import chipmunkd.chipmunk;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
7 import chipmunkd.chipmunk_types_h;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
8 import chipmunkd.cpVect,chipmunkd.cpVect_h;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
9 import chipmunkd.cpBody;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
10
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
11 alias void function(cpConstraint *constraint, cpFloat dt, cpFloat dt_inv) cpConstraintPreStepFunction;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
12 alias void function(cpConstraint *constraint) cpConstraintApplyImpulseFunction;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
13 alias cpFloat function(cpConstraint *constraint) cpConstraintGetImpulseFunction;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
14
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
15 struct cpConstraintClass {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
16 cpConstraintPreStepFunction preStep;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
17 cpConstraintApplyImpulseFunction applyImpulse;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
18 cpConstraintGetImpulseFunction getImpulse;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
19 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
20
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
21
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
22
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
23 struct cpConstraint {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
24 cpConstraintClass *klass;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
25
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
26 cpBody *a;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
27 cpBody *b;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
28 cpFloat maxForce;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
29 cpFloat biasCoef;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
30 cpFloat maxBias;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
31
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
32 cpDataPointer data;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
33 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
34
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
35 //#ifdef CP_USE_DEPRECATED_API_4
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
36 //typedef cpConstraint cpJoint;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
37 //#endif
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
38
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
39 //void cpConstraintDestroy(cpConstraint *constraint);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
40 //void cpConstraintFree(cpConstraint *constraint);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
41
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
42 static void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
43 cpConstraintActivateBodies(cpConstraint *constraint)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
44 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
45 cpBody *a = constraint.a; if(a) cpBodyActivate(a);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
46 cpBody *b = constraint.b; if(b) cpBodyActivate(b);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
47 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
48
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
49 static cpFloat
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
50 cpConstraintGetImpulse(cpConstraint *constraint)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
51 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
52 return constraint.klass.getImpulse(constraint);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
53 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
54
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
55 template cpConstraintCheckCast(string constraint, string _struct)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
56 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
57 enum cpConstraintCheckCast =
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
58 "assert("~constraint~".klass == "~_struct~"GetClass(), \"Constraint is not a "~_struct~"\");";
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
59 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
60
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
61 //#define cpConstraintCheckCast(constraint, struct) \
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
62 // cpAssert(constraint->klass == struct##GetClass(), "Constraint is not a "#struct);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
63
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
64 template CP_DefineConstraintGetter(string _struct,string type,string member,string name)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
65 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
66 enum CP_DefineConstraintGetter =
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
67 "static "~type~" "~_struct~"Get"~name~"(cpConstraint *constraint){"~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
68 cpConstraintCheckCast!("constraint",_struct)~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
69 "cpConstraintActivateBodies(constraint);"~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
70 "return (cast("~_struct~"*)constraint)."~member~";"~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
71 "}";
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
72 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
73
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
74 //#define CP_DefineConstraintGetter(struct, type, member, name) \
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
75 //static inline type \
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
76 //struct##Get##name(const cpConstraint *constraint){ \
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
77 // cpConstraintCheckCast(constraint, struct); \
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
78 // return ((struct *)constraint)->member; \
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
79 //} \
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
80
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
81 template CP_DefineConstraintSetter(string _struct,string type,string member,string name)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
82 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
83 enum CP_DefineConstraintSetter =
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
84 "static void "~_struct~"Set"~name~"(cpConstraint *constraint,"~type~" value){"~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
85 cpConstraintCheckCast!("constraint",_struct)~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
86 "cpConstraintActivateBodies(constraint);"~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
87 "(cast("~_struct~"*)constraint)."~member~" = value;"~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
88 "}";
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
89 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
90
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
91 //#define CP_DefineConstraintSetter(struct, type, member, name) \
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
92 //static inline void \
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
93 //struct##Set##name(cpConstraint *constraint, type value){ \
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
94 // cpConstraintCheckCast(constraint, struct); \
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
95 // cpConstraintActivateBodies(constraint); \
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
96 // ((struct *)constraint)->member = value; \
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
97 //} \
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
98
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
99 template CP_DefineConstraintProperty(string _struct,string type,string member,string name)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
100 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
101 enum CP_DefineConstraintProperty =
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
102 CP_DefineConstraintGetter!(_struct,type,member,name)~CP_DefineConstraintSetter!(_struct,type,member,name);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
103
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
104 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
105
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
106 //#define CP_DefineConstraintProperty(struct, type, member, name) \
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
107 //CP_DefineConstraintGetter(struct, type, member, name) \
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
108 //CP_DefineConstraintSetter(struct, type, member, name)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
109 //TODO:
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
110 //// Built in Joint types
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
111 public import chipmunkd.constraints.cpPinJoint;
6
707dd4e10c28 ported rest of the constraints (chipmunk 5.3.2)
Extrawurst
parents: 4
diff changeset
112 public import chipmunkd.constraints.cpSlideJoint;
4
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
113 public import chipmunkd.constraints.cpPivotJoint;
6
707dd4e10c28 ported rest of the constraints (chipmunk 5.3.2)
Extrawurst
parents: 4
diff changeset
114 public import chipmunkd.constraints.cpGrooveJoint;
4
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
115 public import chipmunkd.constraints.cpDampedSpring;
6
707dd4e10c28 ported rest of the constraints (chipmunk 5.3.2)
Extrawurst
parents: 4
diff changeset
116 public import chipmunkd.constraints.cpDampedRotarySpring;
707dd4e10c28 ported rest of the constraints (chipmunk 5.3.2)
Extrawurst
parents: 4
diff changeset
117 public import chipmunkd.constraints.cpRotaryLimitJoint;
707dd4e10c28 ported rest of the constraints (chipmunk 5.3.2)
Extrawurst
parents: 4
diff changeset
118 public import chipmunkd.constraints.cpRatchetJoint;
707dd4e10c28 ported rest of the constraints (chipmunk 5.3.2)
Extrawurst
parents: 4
diff changeset
119 public import chipmunkd.constraints.cpGearJoint;
707dd4e10c28 ported rest of the constraints (chipmunk 5.3.2)
Extrawurst
parents: 4
diff changeset
120 public import chipmunkd.constraints.cpSimpleMotor;
4
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
121
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
122
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
123 cpFloat cp_constraint_bias_coef = 0.1f;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
124
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
125 void cpConstraintDestroy(cpConstraint *constraint){}
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
126
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
127 void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
128 cpConstraintFree(cpConstraint *constraint)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
129 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
130 if(constraint){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
131 cpConstraintDestroy(constraint);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
132 cpfree(constraint);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
133 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
134 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
135
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
136 void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
137 cpConstraintInit(cpConstraint *constraint, /+const+/ cpConstraintClass *klass, cpBody *a, cpBody *b)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
138 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
139 constraint.klass = klass;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
140 constraint.a = a;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
141 constraint.b = b;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
142
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
143 constraint.maxForce = cast(cpFloat)INFINITY;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
144 constraint.biasCoef = cp_constraint_bias_coef;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
145 constraint.maxBias = cast(cpFloat)INFINITY;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
146 }