chipmunk-ffi 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.markdown +4 -3
- data/VERSION +1 -1
- data/chipmunk-ffi.gemspec +5 -3
- data/lib/chipmunk-ffi.rb +7 -2
- data/lib/chipmunk-ffi/body.rb +60 -2
- data/lib/chipmunk-ffi/constraint.rb +26 -0
- data/lib/chipmunk-ffi/constraints/damped_rotary_spring.rb +58 -0
- data/lib/chipmunk-ffi/constraints/damped_spring.rb +36 -2
- data/lib/chipmunk-ffi/constraints/gear_joint.rb +13 -1
- data/lib/chipmunk-ffi/constraints/groove_joint.rb +6 -1
- data/lib/chipmunk-ffi/constraints/pin_joint.rb +6 -1
- data/lib/chipmunk-ffi/constraints/pivot_joint.rb +6 -1
- data/lib/chipmunk-ffi/constraints/ratchet_joint.rb +6 -1
- data/lib/chipmunk-ffi/constraints/rotary_limit_joint.rb +6 -1
- data/lib/chipmunk-ffi/constraints/simple_motor.rb +6 -1
- data/lib/chipmunk-ffi/constraints/slide_joint.rb +6 -1
- data/lib/chipmunk-ffi/core.rb +1 -1
- data/lib/chipmunk-ffi/shape.rb +32 -3
- data/lib/chipmunk-ffi/space.rb +136 -54
- data/lib/chipmunk-ffi/space_hash.rb +2 -0
- data/lib/chipmunk-ffi/struct_accessor.rb +48 -0
- data/lib/chipmunk-ffi/vec2.rb +7 -1
- data/spec/body_spec.rb +44 -0
- data/spec/constraint_spec.rb +289 -1
- data/spec/shape_spec.rb +66 -1
- data/spec/space_spec.rb +70 -0
- data/spec/vec2_spec.rb +8 -1
- metadata +40 -21
data/spec/constraint_spec.rb
CHANGED
@@ -1,11 +1,71 @@
|
|
1
1
|
require File.dirname(__FILE__)+'/spec_helper'
|
2
2
|
describe 'Constraints in chipmunk' do
|
3
|
-
describe 'PinJoint class' do
|
3
|
+
describe 'PinJoint class' do
|
4
4
|
it 'can be created' do
|
5
5
|
boda = Body.new 90, 46
|
6
6
|
bodb = Body.new 9, 6
|
7
7
|
CP::PinJoint.new(boda,bodb,ZERO_VEC_2,ZERO_VEC_2)
|
8
8
|
end
|
9
|
+
|
10
|
+
it 'can get its bodies' do
|
11
|
+
boda = Body.new 90, 46
|
12
|
+
bodb = Body.new 9, 6
|
13
|
+
joint = CP::PinJoint.new(boda,bodb,ZERO_VEC_2,ZERO_VEC_2)
|
14
|
+
joint.body_a.should be boda
|
15
|
+
joint.body_b.should be bodb
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'can set and get its max_force' do
|
19
|
+
boda = Body.new 90, 46
|
20
|
+
bodb = Body.new 9, 6
|
21
|
+
joint = CP::PinJoint.new(boda,bodb,ZERO_VEC_2,ZERO_VEC_2)
|
22
|
+
joint.max_force = 40
|
23
|
+
joint.max_force.should == 40.0
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'can set and get its max_bias' do
|
27
|
+
boda = Body.new 90, 46
|
28
|
+
bodb = Body.new 9, 6
|
29
|
+
joint = CP::PinJoint.new(boda,bodb,ZERO_VEC_2,ZERO_VEC_2)
|
30
|
+
joint.max_bias = 40
|
31
|
+
joint.max_bias.should == 40.0
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'can set and get its bias_coef' do
|
35
|
+
boda = Body.new 90, 46
|
36
|
+
bodb = Body.new 9, 6
|
37
|
+
joint = CP::PinJoint.new(boda,bodb,ZERO_VEC_2,ZERO_VEC_2)
|
38
|
+
joint.bias_coef = 40
|
39
|
+
joint.bias_coef.should == 40.0
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'can get and set its anchors' do
|
43
|
+
boda = Body.new 90, 46
|
44
|
+
bodb = Body.new 9, 6
|
45
|
+
v1 = vec2(1,2)
|
46
|
+
v2 = vec2(3,4)
|
47
|
+
v3 = vec2(5,6)
|
48
|
+
v4 = vec2(7,8)
|
49
|
+
|
50
|
+
joint = CP::PinJoint.new(boda,bodb,v1,v2)
|
51
|
+
joint.anchr1.should == v1
|
52
|
+
joint.anchr2.should == v2
|
53
|
+
|
54
|
+
joint.anchr1 = v3
|
55
|
+
joint.anchr2 = v4
|
56
|
+
joint.anchr1.should == v3
|
57
|
+
joint.anchr2.should == v4
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'can get and set its dist' do
|
61
|
+
boda = CP::Body.new 90, 46
|
62
|
+
bodb = CP::Body.new 9, 6
|
63
|
+
joint = CP::PinJoint.new(boda,bodb,vec2(3,4),ZERO_VEC_2)
|
64
|
+
joint.dist.should == 5.0
|
65
|
+
joint.dist = 1
|
66
|
+
joint.dist.should == 1.0
|
67
|
+
end
|
68
|
+
|
9
69
|
end
|
10
70
|
|
11
71
|
describe 'SlideJoint class' do
|
@@ -14,6 +74,36 @@ describe 'Constraints in chipmunk' do
|
|
14
74
|
bodb = Body.new 9, 6
|
15
75
|
CP::SlideJoint.new(boda,bodb,ZERO_VEC_2,ZERO_VEC_2,4,6)
|
16
76
|
end
|
77
|
+
|
78
|
+
it 'can get and set its anchors' do
|
79
|
+
boda = Body.new 90, 46
|
80
|
+
bodb = Body.new 9, 6
|
81
|
+
v1 = vec2(1,2)
|
82
|
+
v2 = vec2(3,4)
|
83
|
+
v3 = vec2(5,6)
|
84
|
+
v4 = vec2(7,8)
|
85
|
+
|
86
|
+
joint = CP::SlideJoint.new(boda,bodb,v1,v2,4,6)
|
87
|
+
joint.anchr1.should == v1
|
88
|
+
joint.anchr2.should == v2
|
89
|
+
|
90
|
+
joint.anchr1 = v3
|
91
|
+
joint.anchr2 = v4
|
92
|
+
joint.anchr1.should == v3
|
93
|
+
joint.anchr2.should == v4
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'can get and set its min and max' do
|
97
|
+
boda = Body.new 90, 46
|
98
|
+
bodb = Body.new 9, 6
|
99
|
+
joint = CP::SlideJoint.new(boda,bodb,ZERO_VEC_2,ZERO_VEC_2,4,6)
|
100
|
+
joint.min.should == 4
|
101
|
+
joint.max.should == 6
|
102
|
+
joint.min = 7
|
103
|
+
joint.max = 8
|
104
|
+
joint.min.should == 7
|
105
|
+
joint.max.should == 8
|
106
|
+
end
|
17
107
|
end
|
18
108
|
|
19
109
|
describe 'PivotJoint class' do
|
@@ -22,6 +112,24 @@ describe 'Constraints in chipmunk' do
|
|
22
112
|
bodb = Body.new 9, 6
|
23
113
|
CP::PivotJoint.new(boda,bodb,ZERO_VEC_2,ZERO_VEC_2)
|
24
114
|
end
|
115
|
+
|
116
|
+
it 'can get and set its anchors' do
|
117
|
+
boda = Body.new 90, 46
|
118
|
+
bodb = Body.new 9, 6
|
119
|
+
v1 = vec2(1,2)
|
120
|
+
v2 = vec2(3,4)
|
121
|
+
v3 = vec2(5,6)
|
122
|
+
v4 = vec2(7,8)
|
123
|
+
|
124
|
+
joint = CP::PivotJoint.new(boda,bodb,v1,v2)
|
125
|
+
joint.anchr1.should == v1
|
126
|
+
joint.anchr2.should == v2
|
127
|
+
|
128
|
+
joint.anchr1 = v3
|
129
|
+
joint.anchr2 = v4
|
130
|
+
joint.anchr1.should == v3
|
131
|
+
joint.anchr2.should == v4
|
132
|
+
end
|
25
133
|
end
|
26
134
|
|
27
135
|
describe 'GrooveJoint class' do
|
@@ -30,6 +138,17 @@ describe 'Constraints in chipmunk' do
|
|
30
138
|
bodb = Body.new 9, 6
|
31
139
|
CP::GrooveJoint.new(boda,bodb,ZERO_VEC_2,ZERO_VEC_2,ZERO_VEC_2)
|
32
140
|
end
|
141
|
+
|
142
|
+
it 'can get and set anchr2' do
|
143
|
+
boda = Body.new 90, 46
|
144
|
+
bodb = Body.new 9, 6
|
145
|
+
v1 = vec2(1,2)
|
146
|
+
v2 = vec2(3,4)
|
147
|
+
joint = CP::GrooveJoint.new(boda,bodb,ZERO_VEC_2,ZERO_VEC_2,v1)
|
148
|
+
joint.anchr2.should == v1
|
149
|
+
joint.anchr2 = v2
|
150
|
+
joint.anchr2.should == v2
|
151
|
+
end
|
33
152
|
end
|
34
153
|
|
35
154
|
describe 'DampedSpring class' do
|
@@ -38,6 +157,60 @@ describe 'Constraints in chipmunk' do
|
|
38
157
|
bodb = Body.new 9, 6
|
39
158
|
CP::DampedSpring.new(boda,bodb,ZERO_VEC_2,ZERO_VEC_2,3,4,5)
|
40
159
|
end
|
160
|
+
|
161
|
+
it 'can get and set its anchors' do
|
162
|
+
boda = Body.new 90, 46
|
163
|
+
bodb = Body.new 9, 6
|
164
|
+
v1 = vec2(1,2)
|
165
|
+
v2 = vec2(3,4)
|
166
|
+
v3 = vec2(5,6)
|
167
|
+
v4 = vec2(7,8)
|
168
|
+
|
169
|
+
joint = CP::DampedSpring.new(boda,bodb,v1,v2,3,4,5)
|
170
|
+
joint.anchr1.should == v1
|
171
|
+
joint.anchr2.should == v2
|
172
|
+
|
173
|
+
joint.anchr1 = v3
|
174
|
+
joint.anchr2 = v4
|
175
|
+
joint.anchr1.should == v3
|
176
|
+
joint.anchr2.should == v4
|
177
|
+
end
|
178
|
+
|
179
|
+
it 'can get and set its rest length' do
|
180
|
+
boda = CP::Body.new 90, 46
|
181
|
+
bodb = CP::Body.new 9, 6
|
182
|
+
joint = CP::DampedSpring.new(boda,bodb,ZERO_VEC_2,ZERO_VEC_2,3,4,5)
|
183
|
+
joint.rest_length.should == 3.0
|
184
|
+
joint.rest_length = 1
|
185
|
+
joint.rest_length.should == 1.0
|
186
|
+
end
|
187
|
+
|
188
|
+
it 'can get and set its stiffness' do
|
189
|
+
boda = CP::Body.new 90, 46
|
190
|
+
bodb = CP::Body.new 9, 6
|
191
|
+
joint = CP::DampedSpring.new(boda,bodb,ZERO_VEC_2,ZERO_VEC_2,3,4,5)
|
192
|
+
joint.stiffness.should == 4.0
|
193
|
+
joint.stiffness = 1
|
194
|
+
joint.stiffness.should == 1.0
|
195
|
+
end
|
196
|
+
|
197
|
+
it 'can get and set its damping' do
|
198
|
+
boda = CP::Body.new 90, 46
|
199
|
+
bodb = CP::Body.new 9, 6
|
200
|
+
joint = CP::DampedSpring.new(boda,bodb,ZERO_VEC_2,ZERO_VEC_2,3,4,5)
|
201
|
+
joint.damping.should == 5.0
|
202
|
+
joint.damping = 1
|
203
|
+
joint.damping.should == 1.0
|
204
|
+
end
|
205
|
+
|
206
|
+
it 'can get and set its spring force function' do
|
207
|
+
boda = CP::Body.new 90, 46
|
208
|
+
bodb = CP::Body.new 9, 6
|
209
|
+
joint = CP::DampedSpring.new(boda,bodb,ZERO_VEC_2,ZERO_VEC_2,3,4,5)
|
210
|
+
joint.spring_force_func.call(joint,1.0).should == 8.0
|
211
|
+
joint.spring_force_func = lambda {|spring,float| float + 1.0 }
|
212
|
+
joint.spring_force_func.call(joint,1.0).should == 2.0
|
213
|
+
end
|
41
214
|
end
|
42
215
|
|
43
216
|
describe 'RotaryLimitJoint class' do
|
@@ -46,6 +219,18 @@ describe 'Constraints in chipmunk' do
|
|
46
219
|
bodb = Body.new 9, 6
|
47
220
|
CP::RotaryLimitJoint.new(boda,bodb,Math::PI,Math::PI/2)
|
48
221
|
end
|
222
|
+
|
223
|
+
it 'can get and set min and max' do
|
224
|
+
boda = Body.new 90, 46
|
225
|
+
bodb = Body.new 9, 6
|
226
|
+
joint = CP::RotaryLimitJoint.new(boda,bodb,Math::PI,Math::PI/2)
|
227
|
+
joint.min.should == Math::PI
|
228
|
+
joint.max.should == Math::PI/2
|
229
|
+
joint.min = 0
|
230
|
+
joint.max = 1
|
231
|
+
joint.min.should == 0
|
232
|
+
joint.max.should == 1
|
233
|
+
end
|
49
234
|
end
|
50
235
|
|
51
236
|
describe 'RatchetJoint class' do
|
@@ -54,6 +239,34 @@ describe 'Constraints in chipmunk' do
|
|
54
239
|
bodb = Body.new 9, 6
|
55
240
|
CP::RatchetJoint.new(boda,bodb,3,4)
|
56
241
|
end
|
242
|
+
|
243
|
+
it 'can get and set its angle' do
|
244
|
+
boda = Body.new 90, 46
|
245
|
+
bodb = Body.new 9, 6
|
246
|
+
joint = CP::RatchetJoint.new(boda,bodb,3,4)
|
247
|
+
joint.angle.should == 0
|
248
|
+
joint.angle = Math::PI/2
|
249
|
+
joint.angle.should == Math::PI/2
|
250
|
+
end
|
251
|
+
|
252
|
+
it 'can get and set its phase' do
|
253
|
+
boda = Body.new 90, 46
|
254
|
+
bodb = Body.new 9, 6
|
255
|
+
joint = CP::RatchetJoint.new(boda,bodb,3,4)
|
256
|
+
joint.phase.should == 3.0
|
257
|
+
joint.phase = 5.0
|
258
|
+
joint.phase.should == 5.0
|
259
|
+
end
|
260
|
+
|
261
|
+
it 'can get and set its ratchet' do
|
262
|
+
boda = Body.new 90, 46
|
263
|
+
bodb = Body.new 9, 6
|
264
|
+
joint = CP::RatchetJoint.new(boda,bodb,3,4)
|
265
|
+
joint.ratchet.should == 4.0
|
266
|
+
joint.ratchet = 6.0
|
267
|
+
joint.ratchet.should == 6.0
|
268
|
+
end
|
269
|
+
|
57
270
|
end
|
58
271
|
|
59
272
|
describe 'GearJoint class' do
|
@@ -62,6 +275,26 @@ describe 'Constraints in chipmunk' do
|
|
62
275
|
bodb = Body.new 9, 6
|
63
276
|
CP::GearJoint.new(boda,bodb,1,2)
|
64
277
|
end
|
278
|
+
|
279
|
+
it 'can get and set its phase' do
|
280
|
+
boda = Body.new 90, 46
|
281
|
+
bodb = Body.new 9, 6
|
282
|
+
joint = CP::GearJoint.new(boda,bodb,1,2)
|
283
|
+
joint.phase.should == 1.0
|
284
|
+
joint.phase = 5.0
|
285
|
+
joint.phase.should == 5.0
|
286
|
+
end
|
287
|
+
|
288
|
+
it 'can get and set its ratio' do
|
289
|
+
boda = Body.new 90, 46
|
290
|
+
bodb = Body.new 9, 6
|
291
|
+
joint = CP::GearJoint.new(boda,bodb,1,2)
|
292
|
+
joint.ratio.should == 2.0
|
293
|
+
joint.ratio = 6.0
|
294
|
+
joint.ratio.should == 6.0
|
295
|
+
joint.struct.ratio_inv.should be_close(1.0/6.0, 0.01)
|
296
|
+
end
|
297
|
+
|
65
298
|
end
|
66
299
|
|
67
300
|
describe 'SimpleMotor class' do
|
@@ -70,5 +303,60 @@ describe 'Constraints in chipmunk' do
|
|
70
303
|
bodb = Body.new 9, 6
|
71
304
|
CP::SimpleMotor.new(boda,bodb,2)
|
72
305
|
end
|
306
|
+
|
307
|
+
it 'can get and set its rate' do
|
308
|
+
boda = Body.new 90, 46
|
309
|
+
bodb = Body.new 9, 6
|
310
|
+
joint = CP::SimpleMotor.new(boda,bodb,2)
|
311
|
+
joint.rate.should == 2.0
|
312
|
+
joint.rate = -2.0
|
313
|
+
joint.rate.should == -2.0
|
314
|
+
end
|
315
|
+
end
|
316
|
+
|
317
|
+
describe 'DampedRotarySpring class' do
|
318
|
+
it 'can be created' do
|
319
|
+
boda = Body.new 90, 46
|
320
|
+
bodb = Body.new 9, 6
|
321
|
+
CP::DampedRotarySpring.new(boda,bodb,3,4,5)
|
322
|
+
end
|
323
|
+
|
324
|
+
it 'can get and set its rest angle' do
|
325
|
+
boda = CP::Body.new 90, 46
|
326
|
+
bodb = CP::Body.new 9, 6
|
327
|
+
joint = CP::DampedRotarySpring.new(boda,bodb,3,4,5)
|
328
|
+
joint.rest_angle.should == 3.0
|
329
|
+
joint.rest_angle = 1
|
330
|
+
joint.rest_angle.should == 1.0
|
331
|
+
end
|
332
|
+
|
333
|
+
it 'can get and set its stiffness' do
|
334
|
+
boda = CP::Body.new 90, 46
|
335
|
+
bodb = CP::Body.new 9, 6
|
336
|
+
joint = CP::DampedRotarySpring.new(boda,bodb,3,4,5)
|
337
|
+
joint.stiffness.should == 4.0
|
338
|
+
joint.stiffness = 1
|
339
|
+
joint.stiffness.should == 1.0
|
340
|
+
end
|
341
|
+
|
342
|
+
it 'can get and set its damping' do
|
343
|
+
boda = CP::Body.new 90, 46
|
344
|
+
bodb = CP::Body.new 9, 6
|
345
|
+
joint = CP::DampedRotarySpring.new(boda,bodb,3,4,5)
|
346
|
+
joint.damping.should == 5.0
|
347
|
+
joint.damping = 1
|
348
|
+
joint.damping.should == 1.0
|
349
|
+
end
|
350
|
+
|
351
|
+
it 'can get and set its spring torque function' do
|
352
|
+
boda = CP::Body.new 90, 46
|
353
|
+
bodb = CP::Body.new 9, 6
|
354
|
+
joint = CP::DampedRotarySpring.new(boda,bodb,3,4,5)
|
355
|
+
joint.spring_torque_func.call(joint,1.0).should == -8.0
|
356
|
+
joint.spring_torque_func = lambda {|spring,float| float + 1.0 }
|
357
|
+
joint.spring_torque_func.call(joint,1.0).should == 2.0
|
358
|
+
end
|
73
359
|
end
|
360
|
+
|
361
|
+
|
74
362
|
end
|
data/spec/shape_spec.rb
CHANGED
@@ -129,7 +129,72 @@ describe 'ShapeStruct in chipmunk' do
|
|
129
129
|
describe 'Poly class' do
|
130
130
|
it 'can be created' do
|
131
131
|
bod = CP::Body.new 90, 76
|
132
|
-
s = CP::Shape::Poly.new bod, [vec2(
|
132
|
+
s = CP::Shape::Poly.new bod, [vec2(0,0), vec2(1,-1),vec2(-1,-1)], CP::ZERO_VEC_2
|
133
|
+
end
|
134
|
+
|
135
|
+
it 'can strictly validate vertices' do
|
136
|
+
verts = [
|
137
|
+
vec2(-1,-1),
|
138
|
+
vec2(-1, 1),
|
139
|
+
vec2( 1, 1),
|
140
|
+
vec2( 1,-1)
|
141
|
+
]
|
142
|
+
CP::Shape::Poly.strictly_valid_vertices?(verts).should be true
|
143
|
+
CP::Shape::Poly.strictly_valid_vertices?(verts.reverse).should be false
|
144
|
+
|
145
|
+
verts = [
|
146
|
+
vec2(-1,-1),
|
147
|
+
vec2( 1,-1),
|
148
|
+
vec2( 0, 0), # Bad vert!
|
149
|
+
vec2( 1, 1),
|
150
|
+
vec2(-1, 1)
|
151
|
+
]
|
152
|
+
CP::Shape::Poly.strictly_valid_vertices?(verts).should be false
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'can loosely validate vertices' do
|
156
|
+
verts = [
|
157
|
+
vec2(-1,-1),
|
158
|
+
vec2(-1, 1),
|
159
|
+
vec2( 1, 1),
|
160
|
+
vec2( 1,-1)
|
161
|
+
]
|
162
|
+
CP::Shape::Poly.valid_vertices?(verts).should be true
|
163
|
+
CP::Shape::Poly.valid_vertices?(verts.reverse).should be true
|
164
|
+
|
165
|
+
verts = [
|
166
|
+
vec2(-1,-1),
|
167
|
+
vec2( 1,-1),
|
168
|
+
vec2( 0, 0), # Bad vert!
|
169
|
+
vec2( 1, 1),
|
170
|
+
vec2(-1, 1)
|
171
|
+
]
|
172
|
+
CP::Shape::Poly.valid_vertices?(verts).should be false
|
173
|
+
|
174
|
+
end
|
175
|
+
|
176
|
+
it 'accepts convex polygons with either winding' do
|
177
|
+
bod = CP::Body.new 90, 76
|
178
|
+
verts = [
|
179
|
+
vec2(-1,-1),
|
180
|
+
vec2(-1, 1),
|
181
|
+
vec2( 1, 1),
|
182
|
+
vec2( 1,-1)
|
183
|
+
]
|
184
|
+
CP::Shape::Poly.new(bod,verts,CP::ZERO_VEC_2)
|
185
|
+
CP::Shape::Poly.new(bod,verts.reverse,CP::ZERO_VEC_2)
|
186
|
+
end
|
187
|
+
|
188
|
+
it 'rejects concave polygons' do
|
189
|
+
bod = CP::Body.new 90, 76
|
190
|
+
verts = [
|
191
|
+
vec2(-1,-1),
|
192
|
+
vec2( 1,-1),
|
193
|
+
vec2( 0, 0), # Bad vert!
|
194
|
+
vec2( 1, 1),
|
195
|
+
vec2(-1, 1)
|
196
|
+
]
|
197
|
+
lambda { CP::Shape::Poly.new(bod,verts,CP::ZERO_VEC_2) }.should raise_error
|
133
198
|
end
|
134
199
|
end
|
135
200
|
|
data/spec/space_spec.rb
CHANGED
@@ -177,5 +177,75 @@ describe 'Shape in chipmunk' do
|
|
177
177
|
shapes.size.should == 1
|
178
178
|
shapes.first.should == shapy
|
179
179
|
end
|
180
|
+
|
181
|
+
it 'can do a segment query' do
|
182
|
+
space = CP::Space.new
|
183
|
+
bod = CP::Body.new 90, 76
|
184
|
+
shapy = CP::Shape::Circle.new bod, 40, CP::ZERO_VEC_2
|
185
|
+
shapy.collision_type = :foo
|
186
|
+
|
187
|
+
space.add_shape shapy
|
188
|
+
|
189
|
+
all_ones = 2**32-1
|
190
|
+
|
191
|
+
shapes = []
|
192
|
+
space.segment_query(vec2(100,100),vec2(-100,-100), all_ones,0) do |shape, t, n|
|
193
|
+
shapes << shape
|
194
|
+
end
|
195
|
+
|
196
|
+
shapes.size.should == 1
|
197
|
+
shapes.first.should == shapy
|
198
|
+
end
|
199
|
+
|
200
|
+
it 'can do a segment query that returns info' do
|
201
|
+
space = CP::Space.new
|
202
|
+
bod = CP::Body.new 90, 76
|
203
|
+
shapy = CP::Shape::Circle.new bod, 20, CP::ZERO_VEC_2
|
204
|
+
shapy.collision_type = :foo
|
205
|
+
|
206
|
+
space.add_shape(shapy)
|
207
|
+
|
208
|
+
all_ones = 2**32-1
|
209
|
+
|
210
|
+
info = space.info_segment_query(vec2(-100,10),vec2(0,10), all_ones, 0)
|
211
|
+
info.hit.should be_true
|
212
|
+
info.shape.should be shapy
|
213
|
+
info.t.should be_close(0.827,0.001)
|
214
|
+
info.n.x.should be_close(-0.866, 0.001)
|
215
|
+
info.n.y.should be_close(0.5, 0.001)
|
216
|
+
end
|
217
|
+
|
218
|
+
it 'can do a segment query that returns a shape' do
|
219
|
+
space = CP::Space.new
|
220
|
+
bod = CP::Body.new(90, 76)
|
221
|
+
shapy = CP::Shape::Circle.new bod, 20, CP::ZERO_VEC_2
|
222
|
+
shapy.collision_type = :foo
|
223
|
+
|
224
|
+
space.add_shape shapy
|
225
|
+
|
226
|
+
all_ones = 2**32-1
|
227
|
+
|
228
|
+
obj = space.shape_segment_query(vec2(-100,10),vec2(0,10))
|
229
|
+
obj.should == shapy
|
230
|
+
end
|
231
|
+
|
232
|
+
it 'can do a segment query that finds no shape' do
|
233
|
+
space = CP::Space.new
|
234
|
+
obj = space.shape_segment_query(vec2(-100,10),vec2(0,10))
|
235
|
+
|
236
|
+
obj.should be_nil
|
237
|
+
end
|
238
|
+
|
239
|
+
it 'can do a segment query that finds no info' do
|
240
|
+
space = CP::Space.new
|
241
|
+
info = space.info_segment_query(vec2(-100,10),vec2(0,10))
|
242
|
+
|
243
|
+
info.hit.should be_false
|
244
|
+
info.shape.should be_nil
|
245
|
+
info.t.should be_nil
|
246
|
+
info.n.should be_nil
|
247
|
+
end
|
248
|
+
|
249
|
+
|
180
250
|
|
181
251
|
end
|