pbox2d 0.6.0-java → 0.8.0-java

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.
Files changed (154) hide show
  1. checksums.yaml +4 -4
  2. data/.mvn/extensions.xml +8 -0
  3. data/.mvn/wrapper/maven-wrapper.properties +1 -0
  4. data/.travis.yml +23 -0
  5. data/CHANGELOG.md +8 -0
  6. data/README.md +7 -7
  7. data/Rakefile +1 -2
  8. data/lib/box2d.jar +0 -0
  9. data/lib/pbox2d/version.rb +1 -1
  10. data/lib/pbox2d.rb +1 -0
  11. data/pbox2d.gemspec +6 -11
  12. data/pom.rb +59 -0
  13. data/pom.xml +82 -73
  14. data/src/org/jbox2d/JBox2D.gwt.xml +12 -0
  15. data/src/org/jbox2d/callbacks/ContactAdaptor.java +27 -0
  16. data/src/org/jbox2d/callbacks/ContactFilter.java +59 -0
  17. data/src/org/jbox2d/callbacks/ContactImpulse.java +42 -0
  18. data/src/org/jbox2d/callbacks/ContactListener.java +87 -0
  19. data/src/org/jbox2d/callbacks/DebugDraw.java +297 -0
  20. data/src/org/jbox2d/callbacks/DestructionListener.java +53 -0
  21. data/src/org/jbox2d/callbacks/PairCallback.java +29 -0
  22. data/src/org/jbox2d/callbacks/ParticleDestructionListener.java +20 -0
  23. data/src/org/jbox2d/callbacks/ParticleQueryCallback.java +19 -0
  24. data/src/org/jbox2d/callbacks/ParticleRaycastCallback.java +19 -0
  25. data/src/org/jbox2d/callbacks/QueryCallback.java +45 -0
  26. data/src/org/jbox2d/callbacks/RayCastCallback.java +55 -0
  27. data/src/org/jbox2d/callbacks/TreeCallback.java +42 -0
  28. data/src/org/jbox2d/callbacks/TreeRayCastCallback.java +44 -0
  29. data/src/org/jbox2d/collision/AABB.java +338 -0
  30. data/src/org/jbox2d/collision/Collision.java +1444 -0
  31. data/src/org/jbox2d/collision/ContactID.java +106 -0
  32. data/src/org/jbox2d/collision/Distance.java +773 -0
  33. data/src/org/jbox2d/collision/DistanceInput.java +41 -0
  34. data/src/org/jbox2d/collision/DistanceOutput.java +43 -0
  35. data/src/org/jbox2d/collision/Manifold.java +116 -0
  36. data/src/org/jbox2d/collision/ManifoldPoint.java +104 -0
  37. data/src/org/jbox2d/collision/RayCastInput.java +47 -0
  38. data/src/org/jbox2d/collision/RayCastOutput.java +46 -0
  39. data/src/org/jbox2d/collision/TimeOfImpact.java +526 -0
  40. data/src/org/jbox2d/collision/WorldManifold.java +200 -0
  41. data/src/org/jbox2d/collision/broadphase/BroadPhase.java +92 -0
  42. data/src/org/jbox2d/collision/broadphase/BroadPhaseStrategy.java +88 -0
  43. data/src/org/jbox2d/collision/broadphase/DefaultBroadPhaseBuffer.java +268 -0
  44. data/src/org/jbox2d/collision/broadphase/DynamicTree.java +883 -0
  45. data/src/org/jbox2d/collision/broadphase/DynamicTreeFlatNodes.java +873 -0
  46. data/src/org/jbox2d/collision/broadphase/DynamicTreeNode.java +54 -0
  47. data/src/org/jbox2d/collision/broadphase/Pair.java +46 -0
  48. data/src/org/jbox2d/collision/shapes/ChainShape.java +264 -0
  49. data/src/org/jbox2d/collision/shapes/CircleShape.java +207 -0
  50. data/src/org/jbox2d/collision/shapes/EdgeShape.java +254 -0
  51. data/src/org/jbox2d/collision/shapes/MassData.java +105 -0
  52. data/src/org/jbox2d/collision/shapes/PolygonShape.java +718 -0
  53. data/src/org/jbox2d/collision/shapes/Shape.java +136 -0
  54. data/src/org/jbox2d/collision/shapes/ShapeType.java +32 -0
  55. data/src/org/jbox2d/common/BufferUtils.java +209 -0
  56. data/src/org/jbox2d/common/Color3f.java +88 -0
  57. data/src/org/jbox2d/common/IViewportTransform.java +133 -0
  58. data/src/org/jbox2d/common/Mat22.java +609 -0
  59. data/src/org/jbox2d/common/Mat33.java +290 -0
  60. data/src/org/jbox2d/common/MathUtils.java +335 -0
  61. data/src/org/jbox2d/common/OBBViewportTransform.java +174 -0
  62. data/src/org/jbox2d/common/PlatformMathUtils.java +46 -0
  63. data/src/org/jbox2d/common/RaycastResult.java +37 -0
  64. data/src/org/jbox2d/common/Rot.java +150 -0
  65. data/src/org/jbox2d/common/Settings.java +246 -0
  66. data/src/org/jbox2d/common/Sweep.java +116 -0
  67. data/src/org/jbox2d/common/Timer.java +46 -0
  68. data/src/org/jbox2d/common/Transform.java +203 -0
  69. data/src/org/jbox2d/common/Vec2.java +388 -0
  70. data/src/org/jbox2d/common/Vec3.java +170 -0
  71. data/src/org/jbox2d/dynamics/Body.java +1246 -0
  72. data/src/org/jbox2d/dynamics/BodyDef.java +382 -0
  73. data/src/org/jbox2d/dynamics/BodyType.java +41 -0
  74. data/src/org/jbox2d/dynamics/ContactManager.java +293 -0
  75. data/src/org/jbox2d/dynamics/Filter.java +62 -0
  76. data/src/org/jbox2d/dynamics/Fixture.java +454 -0
  77. data/src/org/jbox2d/dynamics/FixtureDef.java +214 -0
  78. data/src/org/jbox2d/dynamics/FixtureProxy.java +38 -0
  79. data/src/org/jbox2d/dynamics/Island.java +602 -0
  80. data/src/org/jbox2d/dynamics/Profile.java +97 -0
  81. data/src/org/jbox2d/dynamics/SolverData.java +33 -0
  82. data/src/org/jbox2d/dynamics/TimeStep.java +46 -0
  83. data/src/org/jbox2d/dynamics/World.java +2075 -0
  84. data/src/org/jbox2d/dynamics/contacts/ChainAndCircleContact.java +57 -0
  85. data/src/org/jbox2d/dynamics/contacts/ChainAndPolygonContact.java +57 -0
  86. data/src/org/jbox2d/dynamics/contacts/CircleContact.java +50 -0
  87. data/src/org/jbox2d/dynamics/contacts/Contact.java +365 -0
  88. data/src/org/jbox2d/dynamics/contacts/ContactCreator.java +35 -0
  89. data/src/org/jbox2d/dynamics/contacts/ContactEdge.java +56 -0
  90. data/src/org/jbox2d/dynamics/contacts/ContactPositionConstraint.java +49 -0
  91. data/src/org/jbox2d/dynamics/contacts/ContactRegister.java +31 -0
  92. data/src/org/jbox2d/dynamics/contacts/ContactSolver.java +1104 -0
  93. data/src/org/jbox2d/dynamics/contacts/ContactVelocityConstraint.java +60 -0
  94. data/src/org/jbox2d/dynamics/contacts/EdgeAndCircleContact.java +52 -0
  95. data/src/org/jbox2d/dynamics/contacts/EdgeAndPolygonContact.java +52 -0
  96. data/src/org/jbox2d/dynamics/contacts/PolygonAndCircleContact.java +51 -0
  97. data/src/org/jbox2d/dynamics/contacts/PolygonContact.java +50 -0
  98. data/src/org/jbox2d/dynamics/contacts/Position.java +31 -0
  99. data/src/org/jbox2d/dynamics/contacts/Velocity.java +31 -0
  100. data/src/org/jbox2d/dynamics/joints/ConstantVolumeJoint.java +258 -0
  101. data/src/org/jbox2d/dynamics/joints/ConstantVolumeJointDef.java +75 -0
  102. data/src/org/jbox2d/dynamics/joints/DistanceJoint.java +356 -0
  103. data/src/org/jbox2d/dynamics/joints/DistanceJointDef.java +106 -0
  104. data/src/org/jbox2d/dynamics/joints/FrictionJoint.java +294 -0
  105. data/src/org/jbox2d/dynamics/joints/FrictionJointDef.java +78 -0
  106. data/src/org/jbox2d/dynamics/joints/GearJoint.java +520 -0
  107. data/src/org/jbox2d/dynamics/joints/GearJointDef.java +58 -0
  108. data/src/org/jbox2d/dynamics/joints/Jacobian.java +32 -0
  109. data/src/org/jbox2d/dynamics/joints/Joint.java +235 -0
  110. data/src/org/jbox2d/dynamics/joints/JointDef.java +65 -0
  111. data/src/org/jbox2d/dynamics/joints/JointEdge.java +57 -0
  112. data/src/org/jbox2d/dynamics/joints/JointType.java +28 -0
  113. data/src/org/jbox2d/dynamics/joints/LimitState.java +28 -0
  114. data/src/org/jbox2d/dynamics/joints/MotorJoint.java +339 -0
  115. data/src/org/jbox2d/dynamics/joints/MotorJointDef.java +55 -0
  116. data/src/org/jbox2d/dynamics/joints/MouseJoint.java +262 -0
  117. data/src/org/jbox2d/dynamics/joints/MouseJointDef.java +62 -0
  118. data/src/org/jbox2d/dynamics/joints/PrismaticJoint.java +808 -0
  119. data/src/org/jbox2d/dynamics/joints/PrismaticJointDef.java +120 -0
  120. data/src/org/jbox2d/dynamics/joints/PulleyJoint.java +393 -0
  121. data/src/org/jbox2d/dynamics/joints/PulleyJointDef.java +105 -0
  122. data/src/org/jbox2d/dynamics/joints/RevoluteJoint.java +554 -0
  123. data/src/org/jbox2d/dynamics/joints/RevoluteJointDef.java +137 -0
  124. data/src/org/jbox2d/dynamics/joints/RopeJoint.java +276 -0
  125. data/src/org/jbox2d/dynamics/joints/RopeJointDef.java +34 -0
  126. data/src/org/jbox2d/dynamics/joints/WeldJoint.java +424 -0
  127. data/src/org/jbox2d/dynamics/joints/WeldJointDef.java +85 -0
  128. data/src/org/jbox2d/dynamics/joints/WheelJoint.java +498 -0
  129. data/src/org/jbox2d/dynamics/joints/WheelJointDef.java +98 -0
  130. data/src/org/jbox2d/particle/ParticleBodyContact.java +17 -0
  131. data/src/org/jbox2d/particle/ParticleColor.java +52 -0
  132. data/src/org/jbox2d/particle/ParticleContact.java +14 -0
  133. data/src/org/jbox2d/particle/ParticleDef.java +24 -0
  134. data/src/org/jbox2d/particle/ParticleGroup.java +154 -0
  135. data/src/org/jbox2d/particle/ParticleGroupDef.java +62 -0
  136. data/src/org/jbox2d/particle/ParticleGroupType.java +8 -0
  137. data/src/org/jbox2d/particle/ParticleSystem.java +2172 -0
  138. data/src/org/jbox2d/particle/ParticleType.java +28 -0
  139. data/src/org/jbox2d/particle/StackQueue.java +44 -0
  140. data/src/org/jbox2d/particle/VoronoiDiagram.java +209 -0
  141. data/src/org/jbox2d/pooling/IDynamicStack.java +47 -0
  142. data/src/org/jbox2d/pooling/IOrderedStack.java +57 -0
  143. data/src/org/jbox2d/pooling/IWorldPool.java +101 -0
  144. data/src/org/jbox2d/pooling/arrays/FloatArray.java +50 -0
  145. data/src/org/jbox2d/pooling/arrays/GeneratorArray.java +33 -0
  146. data/src/org/jbox2d/pooling/arrays/IntArray.java +53 -0
  147. data/src/org/jbox2d/pooling/arrays/Vec2Array.java +57 -0
  148. data/src/org/jbox2d/pooling/normal/CircleStack.java +77 -0
  149. data/src/org/jbox2d/pooling/normal/DefaultWorldPool.java +331 -0
  150. data/src/org/jbox2d/pooling/normal/MutableStack.java +72 -0
  151. data/src/org/jbox2d/pooling/normal/OrderedStack.java +73 -0
  152. data/src/org/jbox2d/pooling/stacks/DynamicIntStack.java +60 -0
  153. metadata +161 -14
  154. data/lib/jbox2d-library-2.3.1-SNAPSHOT.jar +0 -0
@@ -0,0 +1,338 @@
1
+ /**
2
+ * *****************************************************************************
3
+ * Copyright (c) 2013, Daniel Murphy All rights reserved.
4
+ *
5
+ * Redistribution and use in source and binary forms, with or without
6
+ * modification, are permitted provided that the following conditions are met: *
7
+ * Redistributions of source code must retain the above copyright notice, this
8
+ * list of conditions and the following disclaimer. * Redistributions in binary
9
+ * form must reproduce the above copyright notice, this list of conditions and
10
+ * the following disclaimer in the documentation and/or other materials provided
11
+ * with the distribution.
12
+ *
13
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
14
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
17
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
23
+ * POSSIBILITY OF SUCH DAMAGE.
24
+ *****************************************************************************
25
+ */
26
+ package org.jbox2d.collision;
27
+
28
+ import org.jbox2d.common.MathUtils;
29
+ import org.jbox2d.common.Settings;
30
+ import org.jbox2d.common.Vec2;
31
+ import org.jbox2d.pooling.IWorldPool;
32
+ import org.jbox2d.pooling.normal.DefaultWorldPool;
33
+
34
+ /**
35
+ * An axis-aligned bounding box.
36
+ */
37
+ public class AABB {
38
+
39
+ /**
40
+ * Bottom left vertex of bounding box.
41
+ */
42
+ public final Vec2 lowerBound;
43
+ /**
44
+ * Top right vertex of bounding box.
45
+ */
46
+ public final Vec2 upperBound;
47
+
48
+ /**
49
+ * Creates the default object, with vertices at 0,0 and 0,0.
50
+ */
51
+ public AABB() {
52
+ lowerBound = new Vec2();
53
+ upperBound = new Vec2();
54
+ }
55
+
56
+ /**
57
+ * Copies from the given object
58
+ *
59
+ * @param copy the object to copy from
60
+ */
61
+ public AABB(final AABB copy) {
62
+ this(copy.lowerBound, copy.upperBound);
63
+ }
64
+
65
+ /**
66
+ * Creates an AABB object using the given bounding vertices.
67
+ *
68
+ * @param lowerVertex the bottom left vertex of the bounding box
69
+ * @param upperVertex
70
+ */
71
+ public AABB(final Vec2 lowerVertex, final Vec2 upperVertex) {
72
+ this.lowerBound = lowerVertex.clone(); // clone to be safe
73
+ this.upperBound = upperVertex.clone();
74
+ }
75
+
76
+ /**
77
+ * Sets this object from the given object
78
+ *
79
+ * @param aabb the object to copy from
80
+ */
81
+ public final void set(final AABB aabb) {
82
+ Vec2 v = aabb.lowerBound;
83
+ lowerBound.x = v.x;
84
+ lowerBound.y = v.y;
85
+ Vec2 v1 = aabb.upperBound;
86
+ upperBound.x = v1.x;
87
+ upperBound.y = v1.y;
88
+ }
89
+
90
+ /**
91
+ * Verify that the bounds are sorted
92
+ *
93
+ * @return
94
+ */
95
+ public final boolean isValid() {
96
+ final float dx = upperBound.x - lowerBound.x;
97
+ if (dx < 0f) {
98
+ return false;
99
+ }
100
+ final float dy = upperBound.y - lowerBound.y;
101
+ if (dy < 0) {
102
+ return false;
103
+ }
104
+ return lowerBound.isValid() && upperBound.isValid();
105
+ }
106
+
107
+ /**
108
+ * Get the center of the AABB
109
+ *
110
+ * @return
111
+ */
112
+ public final Vec2 getCenter() {
113
+ final Vec2 center = new Vec2(lowerBound);
114
+ center.addLocal(upperBound);
115
+ center.mulLocal(.5f);
116
+ return center;
117
+ }
118
+
119
+ public final void getCenterToOut(final Vec2 out) {
120
+ out.x = (lowerBound.x + upperBound.x) * .5f;
121
+ out.y = (lowerBound.y + upperBound.y) * .5f;
122
+ }
123
+
124
+ /**
125
+ * Get the extents of the AABB (half-widths).
126
+ *
127
+ * @return
128
+ */
129
+ public final Vec2 getExtents() {
130
+ final Vec2 center = new Vec2(upperBound);
131
+ center.subLocal(lowerBound);
132
+ center.mulLocal(.5f);
133
+ return center;
134
+ }
135
+
136
+ public final void getExtentsToOut(final Vec2 out) {
137
+ out.x = (upperBound.x - lowerBound.x) * .5f;
138
+ out.y = (upperBound.y - lowerBound.y) * .5f; // thanks FDN1
139
+ }
140
+
141
+ public final void getVertices(Vec2[] argRay) {
142
+ argRay[0].set(lowerBound);
143
+ argRay[1].set(lowerBound);
144
+ argRay[1].x += upperBound.x - lowerBound.x;
145
+ argRay[2].set(upperBound);
146
+ argRay[3].set(upperBound);
147
+ argRay[3].x -= upperBound.x - lowerBound.x;
148
+ }
149
+
150
+ /**
151
+ * Combine two AABBs into this one.
152
+ *
153
+ * @param aabb1
154
+ * @param aab
155
+ */
156
+ public final void combine(final AABB aabb1, final AABB aab) {
157
+ lowerBound.x = aabb1.lowerBound.x < aab.lowerBound.x ? aabb1.lowerBound.x : aab.lowerBound.x;
158
+ lowerBound.y = aabb1.lowerBound.y < aab.lowerBound.y ? aabb1.lowerBound.y : aab.lowerBound.y;
159
+ upperBound.x = aabb1.upperBound.x > aab.upperBound.x ? aabb1.upperBound.x : aab.upperBound.x;
160
+ upperBound.y = aabb1.upperBound.y > aab.upperBound.y ? aabb1.upperBound.y : aab.upperBound.y;
161
+ }
162
+
163
+ /**
164
+ * Gets the perimeter length
165
+ *
166
+ * @return
167
+ */
168
+ public final float getPerimeter() {
169
+ return 2.0f * (upperBound.x - lowerBound.x + upperBound.y - lowerBound.y);
170
+ }
171
+
172
+ /**
173
+ * Combines another aabb with this one
174
+ *
175
+ * @param aabb
176
+ */
177
+ public final void combine(final AABB aabb) {
178
+ lowerBound.x = lowerBound.x < aabb.lowerBound.x ? lowerBound.x : aabb.lowerBound.x;
179
+ lowerBound.y = lowerBound.y < aabb.lowerBound.y ? lowerBound.y : aabb.lowerBound.y;
180
+ upperBound.x = upperBound.x > aabb.upperBound.x ? upperBound.x : aabb.upperBound.x;
181
+ upperBound.y = upperBound.y > aabb.upperBound.y ? upperBound.y : aabb.upperBound.y;
182
+ }
183
+
184
+ /**
185
+ * Does this aabb contain the provided AABB.
186
+ *
187
+ * @param aabb
188
+ * @return
189
+ */
190
+ public final boolean contains(final AABB aabb) {
191
+ /*
192
+ * boolean result = true; result = result && lowerBound.x <= aabb.lowerBound.x; result = result
193
+ * && lowerBound.y <= aabb.lowerBound.y; result = result && aabb.upperBound.x <= upperBound.x;
194
+ * result = result && aabb.upperBound.y <= upperBound.y; return result;
195
+ */
196
+ // djm: faster putting all of them together, as if one is false we leave the logic
197
+ // early
198
+ return lowerBound.x <= aabb.lowerBound.x && lowerBound.y <= aabb.lowerBound.y
199
+ && aabb.upperBound.x <= upperBound.x && aabb.upperBound.y <= upperBound.y;
200
+ }
201
+
202
+ /**
203
+ * @deprecated please use
204
+ * {@link #raycast(RayCastOutput, RayCastInput, IWorldPool)} for better
205
+ * performance
206
+ * @param output
207
+ * @param input
208
+ * @return
209
+ */
210
+ public final boolean raycast(final RayCastOutput output, final RayCastInput input) {
211
+ return raycast(output, input, new DefaultWorldPool(4, 4));
212
+ }
213
+
214
+ /**
215
+ * From Real-time Collision Detection, p179.
216
+ *
217
+ * @param output
218
+ * @param input
219
+ * @param argPool
220
+ * @return
221
+ */
222
+ public final boolean raycast(final RayCastOutput output, final RayCastInput input,
223
+ IWorldPool argPool) {
224
+ float tmin = -Float.MAX_VALUE;
225
+ float tmax = Float.MAX_VALUE;
226
+
227
+ final Vec2 p = argPool.popVec2();
228
+ final Vec2 d = argPool.popVec2();
229
+ final Vec2 absD = argPool.popVec2();
230
+ final Vec2 normal = argPool.popVec2();
231
+
232
+ p.set(input.p1);
233
+ d.set(input.p2).subLocal(input.p1);
234
+ Vec2.absToOut(d, absD);
235
+
236
+ // x then y
237
+ if (absD.x < Settings.EPSILON) {
238
+ // Parallel.
239
+ if (p.x < lowerBound.x || upperBound.x < p.x) {
240
+ argPool.pushVec2(4);
241
+ return false;
242
+ }
243
+ } else {
244
+ final float inv_d = 1.0f / d.x;
245
+ float t1 = (lowerBound.x - p.x) * inv_d;
246
+ float t2 = (upperBound.x - p.x) * inv_d;
247
+
248
+ // Sign of the normal vector.
249
+ float s = -1.0f;
250
+
251
+ if (t1 > t2) {
252
+ final float temp = t1;
253
+ t1 = t2;
254
+ t2 = temp;
255
+ s = 1.0f;
256
+ }
257
+
258
+ // Push the min up
259
+ if (t1 > tmin) {
260
+ normal.setZero();
261
+ normal.x = s;
262
+ tmin = t1;
263
+ }
264
+
265
+ // Pull the max down
266
+ tmax = MathUtils.min(tmax, t2);
267
+
268
+ if (tmin > tmax) {
269
+ argPool.pushVec2(4);
270
+ return false;
271
+ }
272
+ }
273
+
274
+ if (absD.y < Settings.EPSILON) {
275
+ // Parallel.
276
+ if (p.y < lowerBound.y || upperBound.y < p.y) {
277
+ argPool.pushVec2(4);
278
+ return false;
279
+ }
280
+ } else {
281
+ final float inv_d = 1.0f / d.y;
282
+ float t1 = (lowerBound.y - p.y) * inv_d;
283
+ float t2 = (upperBound.y - p.y) * inv_d;
284
+
285
+ // Sign of the normal vector.
286
+ float s = -1.0f;
287
+
288
+ if (t1 > t2) {
289
+ final float temp = t1;
290
+ t1 = t2;
291
+ t2 = temp;
292
+ s = 1.0f;
293
+ }
294
+
295
+ // Push the min up
296
+ if (t1 > tmin) {
297
+ normal.setZero();
298
+ normal.y = s;
299
+ tmin = t1;
300
+ }
301
+
302
+ // Pull the max down
303
+ tmax = MathUtils.min(tmax, t2);
304
+
305
+ if (tmin > tmax) {
306
+ argPool.pushVec2(4);
307
+ return false;
308
+ }
309
+ }
310
+
311
+ // Does the ray start inside the box?
312
+ // Does the ray intersect beyond the max fraction?
313
+ if (tmin < 0.0f || input.maxFraction < tmin) {
314
+ argPool.pushVec2(4);
315
+ return false;
316
+ }
317
+
318
+ // Intersection.
319
+ output.fraction = tmin;
320
+ output.normal.x = normal.x;
321
+ output.normal.y = normal.y;
322
+ argPool.pushVec2(4);
323
+ return true;
324
+ }
325
+
326
+ public static final boolean testOverlap(final AABB a, final AABB b) {
327
+ if (b.lowerBound.x - a.upperBound.x > 0.0f || b.lowerBound.y - a.upperBound.y > 0.0f) {
328
+ return false;
329
+ }
330
+ return !(a.lowerBound.x - b.upperBound.x > 0.0f || a.lowerBound.y - b.upperBound.y > 0.0f);
331
+ }
332
+
333
+ @Override
334
+ public final String toString() {
335
+ final String s = "AABB[" + lowerBound + " . " + upperBound + "]";
336
+ return s;
337
+ }
338
+ }