annotate trunk/chipmunkd/cpSpaceQuery.d @ 23:4ceef5833c8c

updated to chipmunk 5.3.3
author Extrawurst
date Fri, 10 Dec 2010 02:10:27 +0100
parents df4ebc8add66
children 80058cee1a77
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.cpSpaceQuery;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
5
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
6 import chipmunkd.chipmunk;
15
df4ebc8add66 rename/refactoring
Extrawurst
parents: 4
diff changeset
7 import chipmunkd.chipmunk_types;
4
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
8
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
9 struct pointQueryContext {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
10 cpLayers layers;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
11 cpGroup group;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
12 cpSpacePointQueryFunc func;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
13 void *data;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
14 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
15
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
16 static void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
17 pointQueryHelper(cpVect *point, cpShape *shape, pointQueryContext *context)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
18 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
19 if(
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
20 !(shape.group && context.group == shape.group) && (context.layers&shape.layers) &&
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
21 cpShapePointQuery(shape, *point)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
22 ){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
23 context.func(shape, context.data);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
24 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
25 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
26
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
27 void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
28 cpSpacePointQuery(cpSpace *space, cpVect point, cpLayers layers, cpGroup group, cpSpacePointQueryFunc func, void *data)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
29 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
30 pointQueryContext context = {layers, group, func, data};
23
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
31
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
32 cpBool locked = space.locked; space.locked = cpTrue; {
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
33 cpSpaceHashPointQuery(space.activeShapes, point, cast(cpSpaceHashQueryFunc)&pointQueryHelper, &context);
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
34 cpSpaceHashPointQuery(space.staticShapes, point, cast(cpSpaceHashQueryFunc)&pointQueryHelper, &context);
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
35 } space.locked = locked;
4
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
36 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
37
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
38 static void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
39 rememberLastPointQuery(cpShape *shape, cpShape **outShape)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
40 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
41 if(!shape.sensor) *outShape = shape;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
42 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
43
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
44 cpShape *
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
45 cpSpacePointQueryFirst(cpSpace *space, cpVect point, cpLayers layers, cpGroup group)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
46 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
47 cpShape *shape = null;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
48 cpSpacePointQuery(space, point, layers, group, cast(cpSpacePointQueryFunc)&rememberLastPointQuery, &shape);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
49
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
50 return shape;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
51 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
52
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
53 void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
54 cpSpaceEachBody(cpSpace *space, cpSpaceBodyIterator func, void *data)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
55 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
56 cpArray *bodies = space.bodies;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
57
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
58 for(int i=0; i<bodies.num; i++)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
59 func(cast(cpBody *)bodies.arr[i], data);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
60 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
61
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
62 //#pragma mark Segment Query Functions
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
63
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
64 struct segQueryContext {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
65 cpVect start, end;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
66 cpLayers layers;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
67 cpGroup group;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
68 cpSpaceSegmentQueryFunc func;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
69 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
70
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
71 static cpFloat
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
72 segQueryFunc(segQueryContext *context, cpShape *shape, void *data)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
73 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
74 cpSegmentQueryInfo info;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
75
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
76 if(
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
77 !(shape.group && context.group == shape.group) && (context.layers&shape.layers) &&
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
78 cpShapeSegmentQuery(shape, context.start, context.end, &info)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
79 ){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
80 context.func(shape, info.t, info.n, data);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
81 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
82
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
83 return 1.0f;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
84 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
85
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
86 void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
87 cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSpaceSegmentQueryFunc func, void *data)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
88 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
89 segQueryContext context = {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
90 start, end,
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
91 layers, group,
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
92 func,
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
93 };
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
94
23
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
95 cpBool locked = space.locked; space.locked = cpTrue; {
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
96 cpSpaceHashSegmentQuery(space.staticShapes, &context, start, end, 1.0f, cast(cpSpaceHashSegmentQueryFunc)&segQueryFunc, data);
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
97 cpSpaceHashSegmentQuery(space.activeShapes, &context, start, end, 1.0f, cast(cpSpaceHashSegmentQueryFunc)&segQueryFunc, data);
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
98 } space.locked = locked;
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 struct segQueryFirstContext {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
102 cpVect start, end;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
103 cpLayers layers;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
104 cpGroup group;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
105 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
106
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
107 static cpFloat
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
108 segQueryFirst(segQueryFirstContext *context, cpShape *shape, cpSegmentQueryInfo *_out)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
109 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
110 cpSegmentQueryInfo info;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
111
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
112 if(
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
113 !(shape.group && context.group == shape.group) &&
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
114 (context.layers&shape.layers) &&
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
115 !shape.sensor &&
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
116 cpShapeSegmentQuery(shape, context.start, context.end, &info) &&
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
117 info.t < _out.t
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
118 ){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
119 *_out = info;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
120 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
121
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
122 return _out.t;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
123 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
124
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
125 cpShape *
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
126 cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpLayers layers, cpGroup group, cpSegmentQueryInfo *_out)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
127 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
128 cpSegmentQueryInfo info = {null, 1.0f, cpvzero};
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
129 if(_out){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
130 (*_out) = info;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
131 } else {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
132 _out = &info;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
133 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
134
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
135 segQueryFirstContext context = {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
136 start, end,
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
137 layers, group
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
138 };
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
139
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
140 cpSpaceHashSegmentQuery(space.staticShapes, &context, start, end, 1.0f, cast(cpSpaceHashSegmentQueryFunc)&segQueryFirst, _out);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
141 cpSpaceHashSegmentQuery(space.activeShapes, &context, start, end, _out.t, cast(cpSpaceHashSegmentQueryFunc)&segQueryFirst, _out);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
142
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
143 return _out.shape;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
144 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
145
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
146 //#pragma mark BB Query functions
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
147
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
148 struct bbQueryContext {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
149 cpLayers layers;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
150 cpGroup group;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
151 cpSpaceBBQueryFunc func;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
152 void *data;
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
153 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
154
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
155 static void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
156 bbQueryHelper(cpBB *bb, cpShape *shape, bbQueryContext *context)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
157 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
158 if(
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
159 !(shape.group && context.group == shape.group) && (context.layers&shape.layers) &&
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
160 cpBBintersects(*bb, shape.bb)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
161 ){
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
162 context.func(shape, context.data);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
163 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
164 }
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
165
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
166 void
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
167 cpSpaceBBQuery(cpSpace *space, cpBB bb, cpLayers layers, cpGroup group, cpSpaceBBQueryFunc func, void *data)
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
168 {
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
169 bbQueryContext context = {layers, group, func, data};
23
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
170
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
171 cpBool locked = space.locked; space.locked = cpTrue; {
4
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
172 cpSpaceHashQuery(space.activeShapes, &bb, bb, cast(cpSpaceHashQueryFunc)&bbQueryHelper, &context);
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
173 cpSpaceHashQuery(space.staticShapes, &bb, bb, cast(cpSpaceHashQueryFunc)&bbQueryHelper, &context);
23
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
174 } space.locked = locked;
4
7ebbd4d05553 initial commit
Extrawurst
parents:
diff changeset
175 }
23
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
176
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
177 //#pragma mark Shape Query Functions
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
178
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
179 struct shapeQueryContext {
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
180 cpSpaceShapeQueryFunc func;
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
181 void *data;
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
182 cpBool anyCollision;
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
183 }
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
184
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
185 // Callback from the spatial hash.
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
186 static void
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
187 shapeQueryHelper(cpShape *a, cpShape *b, shapeQueryContext *context)
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
188 {
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
189 // Reject any of the simple cases
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
190 if(
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
191 (a.group && a.group == b.group) ||
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
192 !(a.layers & b.layers) ||
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
193 a.sensor || b.sensor
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
194 ) return;
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
195
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
196 cpContact contacts[CP_MAX_CONTACTS_PER_ARBITER];
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
197 int numContacts = 0;
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
198
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
199 // Shape 'a' should have the lower shape type. (required by cpCollideShapes() )
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
200 if(a.klass.type <= b.klass.type){
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
201 numContacts = cpCollideShapes(a, b, contacts.ptr);
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
202 } else {
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
203 numContacts = cpCollideShapes(b, a, contacts.ptr);
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
204 for(int i=0; i<numContacts; i++) contacts[i].n = cpvneg(contacts[i].n);
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
205 }
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
206
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
207 if(numContacts){
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
208 context.anyCollision = cpTrue;
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
209
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
210 if(context.func){
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
211 cpContactPointSet set; set.count = numContacts;
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
212 for(int i=0; i<set.count; i++){
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
213 set.points[i].point = contacts[i].p;
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
214 set.points[i].normal = contacts[i].p;
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
215 set.points[i].dist = contacts[i].dist;
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
216 }
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
217
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
218 context.func(b, &set, context.data);
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
219 }
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
220 }
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
221 }
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
222
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
223 cpBool
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
224 cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data)
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
225 {
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
226 cpBB bb = cpShapeCacheBB(shape);
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
227 shapeQueryContext context = {func, data, cpFalse};
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
228
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
229 cpBool locked = space.locked; space.locked = cpTrue; {
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
230 cpSpaceHashQuery(space.activeShapes, shape, bb, cast(cpSpaceHashQueryFunc)&shapeQueryHelper, &context);
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
231 cpSpaceHashQuery(space.staticShapes, shape, bb, cast(cpSpaceHashQueryFunc)&shapeQueryHelper, &context);
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
232 } space.locked = locked;
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
233
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
234 return context.anyCollision;
4ceef5833c8c updated to chipmunk 5.3.3
Extrawurst
parents: 15
diff changeset
235 }