annotate trunk/chipmunkd/cpSpaceComponent.d @ 4:7ebbd4d05553

initial commit
author Extrawurst
date Thu, 02 Dec 2010 02:11:26 +0100
parents
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.cpSpaceComponent;
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 // Chipmunk uses a data structure called a disjoint set forest.
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
12 // My attempts to find a way to splice circularly linked lists in
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
13 // constant time failed, and so I found this neat data structure instead.
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
14
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
15 static cpBody *
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
16 componentNodeRoot(cpBody *_body)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
17 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
18 cpBody *parent = _body.node.parent;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
19
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
20 if(parent){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
21 // path compression, attaches this node directly to the root
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
22 return (_body.node.parent = componentNodeRoot(parent));
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
23 } else {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
24 return _body;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
25 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
26 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
27
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
28 static void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
29 componentNodeMerge(cpBody *a_root, cpBody *b_root)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
30 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
31 if(a_root.node.rank < b_root.node.rank){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
32 a_root.node.parent = b_root;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
33 } else if(a_root.node.rank > b_root.node.rank){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
34 b_root.node.parent = a_root;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
35 } else if(a_root != b_root){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
36 b_root.node.parent = a_root;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
37 a_root.node.rank++;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
38 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
39 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
40
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
41 static void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
42 componentActivate(cpBody *root)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
43 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
44 if(!cpBodyIsSleeping(root)) return;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
45
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
46 cpSpace *space = root.space;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
47 assert(space, "Trying to activate a body that was never added to a space.");
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
48
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
49 cpBody* _body = root;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
50 cpBody* next;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
51 do {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
52 next = _body.node.next;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
53
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
54 cpComponentNode node = {null, null, 0, 0.0f};
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
55 _body.node = node;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
56 cpArrayPush(space.bodies, _body);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
57
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
58 for(cpShape *shape=_body.shapesList; shape; shape=shape.next){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
59 cpSpaceHashRemove(space.staticShapes, shape, shape.hashid);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
60 cpSpaceHashInsert(space.activeShapes, shape, shape.hashid, shape.bb);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
61 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
62 } while((_body = next) != root);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
63
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
64 cpArrayDeleteObj(space.sleepingComponents, root);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
65 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
66
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
67 void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
68 cpBodyActivate(cpBody *_body)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
69 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
70 // Reset the idle time even if it's not in a currently sleeping component
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
71 // Like a body resting on or jointed to a rogue body.
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
72 _body.node.idleTime = 0.0f;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
73 componentActivate(componentNodeRoot(_body));
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
74 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
75
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
76 static void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
77 mergeBodies(cpSpace *space, cpArray *components, cpArray *rogueBodies, cpBody *a, cpBody *b)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
78 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
79 // Don't merge with the static body
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
80 if(cpBodyIsStatic(a) || cpBodyIsStatic(b)) return;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
81
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
82 cpBody *a_root = componentNodeRoot(a);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
83 cpBody *b_root = componentNodeRoot(b);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
84
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
85 cpBool a_sleep = cpBodyIsSleeping(a_root);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
86 cpBool b_sleep = cpBodyIsSleeping(b_root);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
87
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
88 if(a_sleep && b_sleep){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
89 return;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
90 } else if(a_sleep || b_sleep){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
91 componentActivate(a_root);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
92 componentActivate(b_root);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
93 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
94
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
95 // Add any rogue bodies (bodies not added to the space)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
96 if(!a.space) cpArrayPush(rogueBodies, a);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
97 if(!b.space) cpArrayPush(rogueBodies, b);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
98
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
99 componentNodeMerge(a_root, b_root);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
100 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
101
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
102 static cpBool
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
103 componentActive(cpBody *root, cpFloat threshold)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
104 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
105 cpBody *_body = root;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
106 cpBody *next;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
107 do {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
108 next = _body.node.next;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
109 if(cpBodyIsRogue(_body) || _body.node.idleTime < threshold) return cpTrue;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
110 } while((_body = next) != root);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
111
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
112 return cpFalse;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
113 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
114
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
115 static void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
116 addToComponent(cpBody *_body, cpArray *components)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
117 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
118 // Check that the body is not already added to the component list
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
119 if(_body.node.next) return;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
120 cpBody *root = componentNodeRoot(_body);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
121
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
122 cpBody *next = root.node.next;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
123 if(!next){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
124 // If the root isn't part of a list yet, then it hasn't been
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
125 // added to the components list. Do that now.
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
126 cpArrayPush(components, root);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
127 // Start the list
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
128 _body.node.next = root;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
129 root.node.next = _body;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
130 } else if(root != _body) {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
131 // Splice in body after the root.
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
132 _body.node.next = next;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
133 root.node.next = _body;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
134 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
135 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
136
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
137 // TODO this function needs more commenting.
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
138 void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
139 cpSpaceProcessComponents(cpSpace *space, cpFloat dt)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
140 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
141 cpArray *bodies = space.bodies;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
142 cpArray *newBodies = cpArrayNew(bodies.num);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
143 cpArray *rogueBodies = cpArrayNew(16);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
144 cpArray *arbiters = space.arbiters;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
145 cpArray *constraints = space.constraints;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
146 cpArray *components = cpArrayNew(bodies.num/8);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
147
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
148 cpFloat dv = space.idleSpeedThreshold;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
149 cpFloat dvsq = (dv ? dv*dv : cpvdot(space.gravity, space.gravity)*dt*dt);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
150 // update idling
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
151 for(int i=0; i<bodies.num; i++){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
152 cpBody *_body = cast(cpBody*)bodies.arr[i];
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
153
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
154 cpFloat thresh = (dvsq ? _body.m*dvsq : 0.0f);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
155 _body.node.idleTime = (cpBodyKineticEnergy(_body) > thresh ? 0.0f : _body.node.idleTime + dt);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
156 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
157
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
158 // iterate graph edges and build forests
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
159 for(int i=0; i<arbiters.num; i++){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
160 cpArbiter *arb = cast(cpArbiter*)arbiters.arr[i];
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
161 mergeBodies(space, components, rogueBodies, arb.private_a._body, arb.private_b._body);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
162 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
163 for(int j=0; j<constraints.num; j++){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
164 cpConstraint *constraint = cast(cpConstraint *)constraints.arr[j];
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
165 mergeBodies(space, components, rogueBodies, constraint.a, constraint.b);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
166 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
167
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
168 // iterate bodies and add them to their components
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
169 for(int i=0; i<bodies.num; i++)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
170 addToComponent(cast(cpBody*)bodies.arr[i], components);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
171 for(int i=0; i<rogueBodies.num; i++)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
172 addToComponent(cast(cpBody*)rogueBodies.arr[i], components);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
173
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
174 // iterate components, copy or deactivate
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
175 for(int i=0; i<components.num; i++){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
176 cpBody *root = cast(cpBody*)components.arr[i];
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
177 if(componentActive(root, space.sleepTimeThreshold)){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
178 cpBody *_body = root;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
179 cpBody *next;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
180 do {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
181 next = _body.node.next;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
182
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
183 if(!cpBodyIsRogue(_body)) cpArrayPush(newBodies, _body);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
184 _body.node.next = null;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
185 _body.node.parent = null;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
186 _body.node.rank = 0;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
187 } while((_body = next) != root);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
188 } else {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
189 cpBody *_body = root;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
190 cpBody *next;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
191 do {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
192 next = _body.node.next;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
193
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
194 for(cpShape *shape = _body.shapesList; shape; shape = shape.next){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
195 cpSpaceHashRemove(space.activeShapes, shape, shape.hashid);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
196 cpSpaceHashInsert(space.staticShapes, shape, shape.hashid, shape.bb);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
197 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
198 } while((_body = next) != root);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
199
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
200 cpArrayPush(space.sleepingComponents, root);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
201 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
202 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
203
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
204 space.bodies = newBodies;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
205 cpArrayFree(bodies);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
206 cpArrayFree(rogueBodies);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
207 cpArrayFree(components);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
208 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
209
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
210 void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
211 cpSpaceSleepBody(cpSpace *space, cpBody *_body){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
212 cpComponentNode node = {null, _body, 0, 0.0f};
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
213 _body.node = node;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
214
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
215 for(cpShape *shape = _body.shapesList; shape; shape = shape.next){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
216 cpSpaceHashRemove(space.activeShapes, shape, shape.hashid);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
217
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
218 cpShapeCacheBB(shape);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
219 cpSpaceHashInsert(space.staticShapes, shape, shape.hashid, shape.bb);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
220 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
221
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
222 cpArrayPush(space.sleepingComponents, _body);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
223 cpArrayDeleteObj(space.bodies, _body);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
224 }