annotate trunk/chipmunkd/constraints/cpConstraint.d @ 13:c03a41d47b60

- finished all constraints properties - implemented cpAssertWarn the mixin way
author Extrawurst
date Fri, 03 Dec 2010 21:38:01 +0100
parents 707dd4e10c28
children df4ebc8add66
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 template CP_DefineConstraintGetter(string _struct,string type,string member,string name)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
62 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
63 enum CP_DefineConstraintGetter =
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
64 "static "~type~" "~_struct~"Get"~name~"(cpConstraint *constraint){"~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
65 cpConstraintCheckCast!("constraint",_struct)~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
66 "cpConstraintActivateBodies(constraint);"~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
67 "return (cast("~_struct~"*)constraint)."~member~";"~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
68 "}";
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
69 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
70
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
71 template CP_DefineConstraintSetter(string _struct,string type,string member,string name)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
72 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
73 enum CP_DefineConstraintSetter =
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
74 "static void "~_struct~"Set"~name~"(cpConstraint *constraint,"~type~" value){"~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
75 cpConstraintCheckCast!("constraint",_struct)~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
76 "cpConstraintActivateBodies(constraint);"~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
77 "(cast("~_struct~"*)constraint)."~member~" = value;"~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
78 "}";
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_DefineConstraintProperty(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_DefineConstraintProperty =
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
84 CP_DefineConstraintGetter!(_struct,type,member,name)~CP_DefineConstraintSetter!(_struct,type,member,name);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
85
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
86 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
87
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
88 //// Built in Joint types
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
89 public import chipmunkd.constraints.cpPinJoint;
6
707dd4e10c28 ported rest of the constraints (chipmunk 5.3.2)
Extrawurst
parents: 4
diff changeset
90 public import chipmunkd.constraints.cpSlideJoint;
4
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
91 public import chipmunkd.constraints.cpPivotJoint;
6
707dd4e10c28 ported rest of the constraints (chipmunk 5.3.2)
Extrawurst
parents: 4
diff changeset
92 public import chipmunkd.constraints.cpGrooveJoint;
4
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
93 public import chipmunkd.constraints.cpDampedSpring;
6
707dd4e10c28 ported rest of the constraints (chipmunk 5.3.2)
Extrawurst
parents: 4
diff changeset
94 public import chipmunkd.constraints.cpDampedRotarySpring;
707dd4e10c28 ported rest of the constraints (chipmunk 5.3.2)
Extrawurst
parents: 4
diff changeset
95 public import chipmunkd.constraints.cpRotaryLimitJoint;
707dd4e10c28 ported rest of the constraints (chipmunk 5.3.2)
Extrawurst
parents: 4
diff changeset
96 public import chipmunkd.constraints.cpRatchetJoint;
707dd4e10c28 ported rest of the constraints (chipmunk 5.3.2)
Extrawurst
parents: 4
diff changeset
97 public import chipmunkd.constraints.cpGearJoint;
707dd4e10c28 ported rest of the constraints (chipmunk 5.3.2)
Extrawurst
parents: 4
diff changeset
98 public import chipmunkd.constraints.cpSimpleMotor;
4
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
99
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
100
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
101 cpFloat cp_constraint_bias_coef = 0.1f;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
102
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
103 void cpConstraintDestroy(cpConstraint *constraint){}
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
104
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
105 void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
106 cpConstraintFree(cpConstraint *constraint)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
107 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
108 if(constraint){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
109 cpConstraintDestroy(constraint);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
110 cpfree(constraint);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
111 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
112 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
113
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
114 void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
115 cpConstraintInit(cpConstraint *constraint, /+const+/ cpConstraintClass *klass, cpBody *a, cpBody *b)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
116 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
117 constraint.klass = klass;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
118 constraint.a = a;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
119 constraint.b = b;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
120
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
121 constraint.maxForce = cast(cpFloat)INFINITY;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
122 constraint.biasCoef = cp_constraint_bias_coef;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
123 constraint.maxBias = cast(cpFloat)INFINITY;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
124 }