2 Copyright (c) 2009 Hanno Braun <hanno@habraun.net>
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
8 http://www.apache.org/licenses/LICENSE-2.0
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
19 package net
.habraun
.kong
.physics
24 import org
.junit
.Assert
._
28 class SimpleNarrowPhaseTest
{
31 def verifyIsNarrowPhase
{
32 val narrowPhase
= new SimpleNarrowPhase
33 assertTrue(narrowPhase
.isInstanceOf
[NarrowPhase
])
39 def inspectTwoNoShapesExpectNoCollision
{
40 val narrowPhase
= new SimpleNarrowPhase
47 assertEquals(None
, narrowPhase
.inspectCollision(0.0, b1
, b2
))
53 def inspectTwoStationaryCirclesExpectNoCollision
{
54 val narrowPhase
= new SimpleNarrowPhase
57 b1
.position
= Vec2D(0, 0)
60 b2
.position
= Vec2D(3, 0)
63 assertEquals(None
, narrowPhase
.inspectCollision(2.0, b1
, b2
))
69 def inspectTwoStationaryCirclesExpectCollision
{
70 val narrowPhase
= new SimpleNarrowPhase
73 b1
.position
= Vec2D(0, 0)
76 b2
.position
= Vec2D(3, 0)
79 val expectedCollision
= Collision(0.0, Contact(b1
, b2
, Vec2D(1, 0), Vec2D(-1, 0), Vec2D(0, 0)))
81 assertEquals(Some(expectedCollision
), narrowPhase
.inspectCollision(2.0, b1
, b2
))
87 def inspectTwoCirclesOneMovingExpectCollision
{
88 val narrowPhase
= new SimpleNarrowPhase
91 b1
.position
= Vec2D(-1, 0)
92 b1
.velocity
= Vec2D(1, 0)
95 b2
.position
= Vec2D(2, 0)
98 val expectedCollision
= Collision(0.5, Contact(b1
, b2
, Vec2D(1, 0), Vec2D(-1, 0), Vec2D(1, 0)))
100 assertEquals(Some(expectedCollision
), narrowPhase
.inspectCollision(2.0, b1
, b2
))
106 def inspectTwoCirclesOneMovingExpectNoCollision
{
107 val narrowPhase
= new SimpleNarrowPhase
110 b1
.position
= Vec2D(-3, 0)
111 b1
.velocity
= Vec2D(1, 0)
114 b2
.position
= Vec2D(2, 0)
117 assertEquals(None
, narrowPhase
.inspectCollision(2.0, b1
, b2
))
123 def inspectTwoMovingCirclesExpectCollision
{
124 val narrowPhase
= new SimpleNarrowPhase
128 b1
.position
= Vec2D(-3, 0)
129 b1
.velocity
= Vec2D(1, 0)
132 b2
.position
= Vec2D(1, 0)
133 b2
.velocity
= Vec2D(-1, 0)
135 val expectedCollision
= Collision(0.5, Contact(b1
, b2
, Vec2D(1, 0), Vec2D(-1, 0), Vec2D(-1, 0)))
137 assertEquals(Some(expectedCollision
), narrowPhase
.inspectCollision(2.0, b1
, b2
))
143 def inspectTwoMovingCirclesExpectNoCollision
{
144 val narrowPhase
= new SimpleNarrowPhase
148 b1
.position
= Vec2D(-3, 0)
149 b1
.velocity
= Vec2D(1, 0)
152 b2
.position
= Vec2D(4, 0)
153 b2
.velocity
= Vec2D(-1, 0)
155 assertEquals(None
, narrowPhase
.inspectCollision(2.0, b1
, b2
))
161 def inspectTwoMovingCirclesExpectNoCollision2
{
162 val narrowPhase
= new SimpleNarrowPhase
166 b1
.position
= Vec2D(-2, 0)
167 b1
.velocity
= Vec2D(-1, 0)
170 b2
.position
= Vec2D(2, 0)
171 b2
.velocity
= Vec2D(1, 0)
173 assertEquals(None
, narrowPhase
.inspectCollision(2.0, b1
, b2
))
179 def inspectTwoMovingCirclesWithIntersectingCoursesExpectNoCollision
{
180 val narrowPhase
= new SimpleNarrowPhase
184 b1
.position
= Vec2D(0, 0)
185 b1
.velocity
= Vec2D(0, 5)
188 b2
.position
= Vec2D(5, 0)
189 b2
.velocity
= Vec2D(-5, 0)
191 assertEquals(None
, narrowPhase
.inspectCollision(2.0, b1
, b2
))
197 def inspectCircleAndNoShapeExpectNoCollision
{
198 val narrowPhase
= new SimpleNarrowPhase
201 b1
.position
= Vec2D(0, 0)
204 b2
.position
= Vec2D(0, 0.5)
207 assertEquals(None
, narrowPhase
.inspectCollision(0.0, b1
, b2
))
213 def inspectCircleAndLineSegmentExpectNoCollision
{
214 val narrowPhase
= new SimpleNarrowPhase
217 b1
.position
= Vec2D(0, 0)
220 b2
.position
= Vec2D(0, 2)
221 b2
.shape
= LineSegment(Vec2D(-1, 0), Vec2D(2, 0))
223 assertEquals(None
, narrowPhase
.inspectCollision(0.0, b1
, b2
))
229 def inspectLineSegmentAndCircleExpectNoCollision
{
230 val narrowPhase
= new SimpleNarrowPhase
233 b1
.position
= Vec2D(0, 0)
236 b2
.position
= Vec2D(0, 2)
237 b2
.shape
= LineSegment(Vec2D(-1, 0), Vec2D(2, 0))
239 assertEquals(None
, narrowPhase
.inspectCollision(0.0, b2
, b1
))
245 def inspectCircleAndLineSegmentExpectCollision
{
246 val narrowPhase
= new SimpleNarrowPhase
249 b1
.position
= Vec2D(0, 0)
252 b2
.position
= Vec2D(0, 0.5)
253 b2
.shape
= LineSegment(Vec2D(-1, 0), Vec2D(2, 0))
255 val expectedCollision
= Collision(1.0, Contact(b1
, b2
, Vec2D(0, 1), Vec2D(0, -1), Vec2D(0, 0)))
257 assertEquals(Some(expectedCollision
), narrowPhase
.inspectCollision(0.0, b1
, b2
))
263 def inspectLineSegmentAndCirlceExpectCollision
{
264 val narrowPhase
= new SimpleNarrowPhase
267 b1
.position
= Vec2D(0, 0)
270 b2
.position
= Vec2D(0, 0.5)
271 b2
.shape
= LineSegment(Vec2D(-1, 0), Vec2D(2, 0))
273 val expectedCollision
= Collision(1.0, Contact(b2
, b1
, Vec2D(0, -1), Vec2D(0, 1), Vec2D(0, 0)))
275 assertEquals(Some(expectedCollision
), narrowPhase
.inspectCollision(0.0, b2
, b1
))
281 def inspectTwoLineSegmentsExpectNoCollisionEvenIfTheyCollide
{
282 val narrowPhase
= new SimpleNarrowPhase
285 b1
.position
= Vec2D(0, 1)
286 b1
.shape
= LineSegment(Vec2D(0, 0), Vec2D(2, -2))
288 b2
.position
= Vec2D(0, -1)
289 b2
.shape
= LineSegment(Vec2D(0, 0), Vec2D(2, 2))
291 assertEquals(None
, narrowPhase
.inspectCollision(0.0, b1
, b2
))