annotate trunk/chipmunkd/constraints/cpConstraint.d @ 28:4541ca17975b

use __gshared as chipmunk heavily relies on globals and D would otherwise make them TLS
author Extrawurst
date Mon, 13 Dec 2010 21:40:56 +0100
parents df4ebc8add66
children
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
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
8 alias void function(cpConstraint *constraint, cpFloat dt, cpFloat dt_inv) cpConstraintPreStepFunction;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
9 alias void function(cpConstraint *constraint) cpConstraintApplyImpulseFunction;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
10 alias cpFloat function(cpConstraint *constraint) cpConstraintGetImpulseFunction;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
11
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
12 struct cpConstraintClass {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
13 cpConstraintPreStepFunction preStep;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
14 cpConstraintApplyImpulseFunction applyImpulse;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
15 cpConstraintGetImpulseFunction getImpulse;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
16 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
17
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
18
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
19
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
20 struct cpConstraint {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
21 cpConstraintClass *klass;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
22
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
23 cpBody *a;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
24 cpBody *b;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
25 cpFloat maxForce;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
26 cpFloat biasCoef;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
27 cpFloat maxBias;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
28
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
29 cpDataPointer data;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
30 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
31
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
32 //#ifdef CP_USE_DEPRECATED_API_4
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
33 //typedef cpConstraint cpJoint;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
34 //#endif
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
35
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
36 //void cpConstraintDestroy(cpConstraint *constraint);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
37 //void cpConstraintFree(cpConstraint *constraint);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
38
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
39 static void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
40 cpConstraintActivateBodies(cpConstraint *constraint)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
41 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
42 cpBody *a = constraint.a; if(a) cpBodyActivate(a);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
43 cpBody *b = constraint.b; if(b) cpBodyActivate(b);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
44 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
45
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
46 static cpFloat
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
47 cpConstraintGetImpulse(cpConstraint *constraint)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
48 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
49 return constraint.klass.getImpulse(constraint);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
50 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
51
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
52 template cpConstraintCheckCast(string constraint, string _struct)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
53 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
54 enum cpConstraintCheckCast =
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
55 "assert("~constraint~".klass == "~_struct~"GetClass(), \"Constraint is not a "~_struct~"\");";
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
56 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
57
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
58 template CP_DefineConstraintGetter(string _struct,string type,string member,string name)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
59 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
60 enum CP_DefineConstraintGetter =
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
61 "static "~type~" "~_struct~"Get"~name~"(cpConstraint *constraint){"~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
62 cpConstraintCheckCast!("constraint",_struct)~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
63 "cpConstraintActivateBodies(constraint);"~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
64 "return (cast("~_struct~"*)constraint)."~member~";"~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
65 "}";
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
66 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
67
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
68 template CP_DefineConstraintSetter(string _struct,string type,string member,string name)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
69 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
70 enum CP_DefineConstraintSetter =
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
71 "static void "~_struct~"Set"~name~"(cpConstraint *constraint,"~type~" value){"~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
72 cpConstraintCheckCast!("constraint",_struct)~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
73 "cpConstraintActivateBodies(constraint);"~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
74 "(cast("~_struct~"*)constraint)."~member~" = value;"~
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
75 "}";
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
76 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
77
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
78 template CP_DefineConstraintProperty(string _struct,string type,string member,string name)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
79 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
80 enum CP_DefineConstraintProperty =
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
81 CP_DefineConstraintGetter!(_struct,type,member,name)~CP_DefineConstraintSetter!(_struct,type,member,name);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
82
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
83 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
84
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
85 //// Built in Joint types
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
86 public import chipmunkd.constraints.cpPinJoint;
6
707dd4e10c28 ported rest of the constraints (chipmunk 5.3.2)
Extrawurst
parents: 4
diff changeset
87 public import chipmunkd.constraints.cpSlideJoint;
4
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
88 public import chipmunkd.constraints.cpPivotJoint;
6
707dd4e10c28 ported rest of the constraints (chipmunk 5.3.2)
Extrawurst
parents: 4
diff changeset
89 public import chipmunkd.constraints.cpGrooveJoint;
4
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
90 public import chipmunkd.constraints.cpDampedSpring;
6
707dd4e10c28 ported rest of the constraints (chipmunk 5.3.2)
Extrawurst
parents: 4
diff changeset
91 public import chipmunkd.constraints.cpDampedRotarySpring;
707dd4e10c28 ported rest of the constraints (chipmunk 5.3.2)
Extrawurst
parents: 4
diff changeset
92 public import chipmunkd.constraints.cpRotaryLimitJoint;
707dd4e10c28 ported rest of the constraints (chipmunk 5.3.2)
Extrawurst
parents: 4
diff changeset
93 public import chipmunkd.constraints.cpRatchetJoint;
707dd4e10c28 ported rest of the constraints (chipmunk 5.3.2)
Extrawurst
parents: 4
diff changeset
94 public import chipmunkd.constraints.cpGearJoint;
707dd4e10c28 ported rest of the constraints (chipmunk 5.3.2)
Extrawurst
parents: 4
diff changeset
95 public import chipmunkd.constraints.cpSimpleMotor;
4
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
96
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
97
28
4541ca17975b use __gshared as chipmunk heavily relies on globals and D would otherwise make them TLS
Extrawurst
parents: 15
diff changeset
98 __gshared cpFloat cp_constraint_bias_coef = 0.1f;
4
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
99
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
100 void cpConstraintDestroy(cpConstraint *constraint){}
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
101
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
102 void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
103 cpConstraintFree(cpConstraint *constraint)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
104 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
105 if(constraint){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
106 cpConstraintDestroy(constraint);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
107 cpfree(constraint);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
108 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
109 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
110
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
111 void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
112 cpConstraintInit(cpConstraint *constraint, /+const+/ cpConstraintClass *klass, cpBody *a, cpBody *b)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
113 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
114 constraint.klass = klass;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
115 constraint.a = a;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
116 constraint.b = b;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
117
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
118 constraint.maxForce = cast(cpFloat)INFINITY;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
119 constraint.biasCoef = cp_constraint_bias_coef;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
120 constraint.maxBias = cast(cpFloat)INFINITY;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
121 }