pbox2d 0.6.0-java → 0.8.0-java

Sign up to get free protection for your applications and to get access to all the features.
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,60 @@
1
+ /*******************************************************************************
2
+ * Copyright (c) 2013, Daniel Murphy
3
+ * All rights reserved.
4
+ *
5
+ * Redistribution and use in source and binary forms, with or without modification,
6
+ * are permitted provided that the following conditions are met:
7
+ * * Redistributions of source code must retain the above copyright notice,
8
+ * this list of conditions and the following disclaimer.
9
+ * * Redistributions in binary form must reproduce the above copyright notice,
10
+ * this list of conditions and the following disclaimer in the documentation
11
+ * and/or other materials provided with the distribution.
12
+ *
13
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
14
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
17
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
19
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
20
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
21
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
22
+ * POSSIBILITY OF SUCH DAMAGE.
23
+ ******************************************************************************/
24
+ package org.jbox2d.dynamics.contacts;
25
+
26
+ import org.jbox2d.common.Mat22;
27
+ import org.jbox2d.common.Settings;
28
+ import org.jbox2d.common.Vec2;
29
+
30
+ public class ContactVelocityConstraint {
31
+ public VelocityConstraintPoint[] points = new VelocityConstraintPoint[Settings.maxManifoldPoints];
32
+ public final Vec2 normal = new Vec2();
33
+ public final Mat22 normalMass = new Mat22();
34
+ public final Mat22 K = new Mat22();
35
+ public int indexA;
36
+ public int indexB;
37
+ public float invMassA, invMassB;
38
+ public float invIA, invIB;
39
+ public float friction;
40
+ public float restitution;
41
+ public float tangentSpeed;
42
+ public int pointCount;
43
+ public int contactIndex;
44
+
45
+ public ContactVelocityConstraint() {
46
+ for (int i = 0; i < points.length; i++) {
47
+ points[i] = new VelocityConstraintPoint();
48
+ }
49
+ }
50
+
51
+ public static class VelocityConstraintPoint {
52
+ public final Vec2 rA = new Vec2();
53
+ public final Vec2 rB = new Vec2();
54
+ public float normalImpulse;
55
+ public float tangentImpulse;
56
+ public float normalMass;
57
+ public float tangentMass;
58
+ public float velocityBias;
59
+ }
60
+ }
@@ -0,0 +1,52 @@
1
+ /*******************************************************************************
2
+ * Copyright (c) 2013, Daniel Murphy
3
+ * All rights reserved.
4
+ *
5
+ * Redistribution and use in source and binary forms, with or without modification,
6
+ * are permitted provided that the following conditions are met:
7
+ * * Redistributions of source code must retain the above copyright notice,
8
+ * this list of conditions and the following disclaimer.
9
+ * * Redistributions in binary form must reproduce the above copyright notice,
10
+ * this list of conditions and the following disclaimer in the documentation
11
+ * and/or other materials provided with the distribution.
12
+ *
13
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
14
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
17
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
19
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
20
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
21
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
22
+ * POSSIBILITY OF SUCH DAMAGE.
23
+ ******************************************************************************/
24
+ package org.jbox2d.dynamics.contacts;
25
+
26
+ import org.jbox2d.collision.Manifold;
27
+ import org.jbox2d.collision.shapes.CircleShape;
28
+ import org.jbox2d.collision.shapes.EdgeShape;
29
+ import org.jbox2d.collision.shapes.ShapeType;
30
+ import org.jbox2d.common.Transform;
31
+ import org.jbox2d.dynamics.Fixture;
32
+ import org.jbox2d.pooling.IWorldPool;
33
+
34
+ public class EdgeAndCircleContact extends Contact {
35
+
36
+ public EdgeAndCircleContact(IWorldPool argPool) {
37
+ super(argPool);
38
+ }
39
+
40
+ @Override
41
+ public void init(Fixture fA, int indexA, Fixture fB, int indexB) {
42
+ super.init(fA, indexA, fB, indexB);
43
+ assert (m_fixtureA.getType() == ShapeType.EDGE);
44
+ assert (m_fixtureB.getType() == ShapeType.CIRCLE);
45
+ }
46
+
47
+ @Override
48
+ public void evaluate(Manifold manifold, Transform xfA, Transform xfB) {
49
+ pool.getCollision().collideEdgeAndCircle(manifold, (EdgeShape) m_fixtureA.getShape(), xfA,
50
+ (CircleShape) m_fixtureB.getShape(), xfB);
51
+ }
52
+ }
@@ -0,0 +1,52 @@
1
+ /*******************************************************************************
2
+ * Copyright (c) 2013, Daniel Murphy
3
+ * All rights reserved.
4
+ *
5
+ * Redistribution and use in source and binary forms, with or without modification,
6
+ * are permitted provided that the following conditions are met:
7
+ * * Redistributions of source code must retain the above copyright notice,
8
+ * this list of conditions and the following disclaimer.
9
+ * * Redistributions in binary form must reproduce the above copyright notice,
10
+ * this list of conditions and the following disclaimer in the documentation
11
+ * and/or other materials provided with the distribution.
12
+ *
13
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
14
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
17
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
19
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
20
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
21
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
22
+ * POSSIBILITY OF SUCH DAMAGE.
23
+ ******************************************************************************/
24
+ package org.jbox2d.dynamics.contacts;
25
+
26
+ import org.jbox2d.collision.Manifold;
27
+ import org.jbox2d.collision.shapes.EdgeShape;
28
+ import org.jbox2d.collision.shapes.PolygonShape;
29
+ import org.jbox2d.collision.shapes.ShapeType;
30
+ import org.jbox2d.common.Transform;
31
+ import org.jbox2d.dynamics.Fixture;
32
+ import org.jbox2d.pooling.IWorldPool;
33
+
34
+ public class EdgeAndPolygonContact extends Contact {
35
+
36
+ public EdgeAndPolygonContact(IWorldPool argPool) {
37
+ super(argPool);
38
+ }
39
+
40
+ @Override
41
+ public void init(Fixture fA, int indexA, Fixture fB, int indexB) {
42
+ super.init(fA, indexA, fB, indexB);
43
+ assert (m_fixtureA.getType() == ShapeType.EDGE);
44
+ assert (m_fixtureB.getType() == ShapeType.POLYGON);
45
+ }
46
+
47
+ @Override
48
+ public void evaluate(Manifold manifold, Transform xfA, Transform xfB) {
49
+ pool.getCollision().collideEdgeAndPolygon(manifold, (EdgeShape) m_fixtureA.getShape(), xfA,
50
+ (PolygonShape) m_fixtureB.getShape(), xfB);
51
+ }
52
+ }
@@ -0,0 +1,51 @@
1
+ /*******************************************************************************
2
+ * Copyright (c) 2013, Daniel Murphy
3
+ * All rights reserved.
4
+ *
5
+ * Redistribution and use in source and binary forms, with or without modification,
6
+ * are permitted provided that the following conditions are met:
7
+ * * Redistributions of source code must retain the above copyright notice,
8
+ * this list of conditions and the following disclaimer.
9
+ * * Redistributions in binary form must reproduce the above copyright notice,
10
+ * this list of conditions and the following disclaimer in the documentation
11
+ * and/or other materials provided with the distribution.
12
+ *
13
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
14
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
17
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
19
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
20
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
21
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
22
+ * POSSIBILITY OF SUCH DAMAGE.
23
+ ******************************************************************************/
24
+ package org.jbox2d.dynamics.contacts;
25
+
26
+ import org.jbox2d.collision.Manifold;
27
+ import org.jbox2d.collision.shapes.CircleShape;
28
+ import org.jbox2d.collision.shapes.PolygonShape;
29
+ import org.jbox2d.collision.shapes.ShapeType;
30
+ import org.jbox2d.common.Transform;
31
+ import org.jbox2d.dynamics.Fixture;
32
+ import org.jbox2d.pooling.IWorldPool;
33
+
34
+ public class PolygonAndCircleContact extends Contact {
35
+
36
+ public PolygonAndCircleContact(IWorldPool argPool) {
37
+ super(argPool);
38
+ }
39
+
40
+ public void init(Fixture fixtureA, Fixture fixtureB) {
41
+ super.init(fixtureA, 0, fixtureB, 0);
42
+ assert (m_fixtureA.getType() == ShapeType.POLYGON);
43
+ assert (m_fixtureB.getType() == ShapeType.CIRCLE);
44
+ }
45
+
46
+ @Override
47
+ public void evaluate(Manifold manifold, Transform xfA, Transform xfB) {
48
+ pool.getCollision().collidePolygonAndCircle(manifold, (PolygonShape) m_fixtureA.getShape(),
49
+ xfA, (CircleShape) m_fixtureB.getShape(), xfB);
50
+ }
51
+ }
@@ -0,0 +1,50 @@
1
+ /*******************************************************************************
2
+ * Copyright (c) 2013, Daniel Murphy
3
+ * All rights reserved.
4
+ *
5
+ * Redistribution and use in source and binary forms, with or without modification,
6
+ * are permitted provided that the following conditions are met:
7
+ * * Redistributions of source code must retain the above copyright notice,
8
+ * this list of conditions and the following disclaimer.
9
+ * * Redistributions in binary form must reproduce the above copyright notice,
10
+ * this list of conditions and the following disclaimer in the documentation
11
+ * and/or other materials provided with the distribution.
12
+ *
13
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
14
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
17
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
19
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
20
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
21
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
22
+ * POSSIBILITY OF SUCH DAMAGE.
23
+ ******************************************************************************/
24
+ package org.jbox2d.dynamics.contacts;
25
+
26
+ import org.jbox2d.collision.Manifold;
27
+ import org.jbox2d.collision.shapes.PolygonShape;
28
+ import org.jbox2d.collision.shapes.ShapeType;
29
+ import org.jbox2d.common.Transform;
30
+ import org.jbox2d.dynamics.Fixture;
31
+ import org.jbox2d.pooling.IWorldPool;
32
+
33
+ public class PolygonContact extends Contact {
34
+
35
+ public PolygonContact(IWorldPool argPool) {
36
+ super(argPool);
37
+ }
38
+
39
+ public void init(Fixture fixtureA, Fixture fixtureB) {
40
+ super.init(fixtureA, 0, fixtureB, 0);
41
+ assert (m_fixtureA.getType() == ShapeType.POLYGON);
42
+ assert (m_fixtureB.getType() == ShapeType.POLYGON);
43
+ }
44
+
45
+ @Override
46
+ public void evaluate(Manifold manifold, Transform xfA, Transform xfB) {
47
+ pool.getCollision().collidePolygons(manifold, (PolygonShape) m_fixtureA.getShape(), xfA,
48
+ (PolygonShape) m_fixtureB.getShape(), xfB);
49
+ }
50
+ }
@@ -0,0 +1,31 @@
1
+ /*******************************************************************************
2
+ * Copyright (c) 2013, Daniel Murphy
3
+ * All rights reserved.
4
+ *
5
+ * Redistribution and use in source and binary forms, with or without modification,
6
+ * are permitted provided that the following conditions are met:
7
+ * * Redistributions of source code must retain the above copyright notice,
8
+ * this list of conditions and the following disclaimer.
9
+ * * Redistributions in binary form must reproduce the above copyright notice,
10
+ * this list of conditions and the following disclaimer in the documentation
11
+ * and/or other materials provided with the distribution.
12
+ *
13
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
14
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
17
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
19
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
20
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
21
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
22
+ * POSSIBILITY OF SUCH DAMAGE.
23
+ ******************************************************************************/
24
+ package org.jbox2d.dynamics.contacts;
25
+
26
+ import org.jbox2d.common.Vec2;
27
+
28
+ public class Position {
29
+ public final Vec2 c = new Vec2();
30
+ public float a;
31
+ }
@@ -0,0 +1,31 @@
1
+ /*******************************************************************************
2
+ * Copyright (c) 2013, Daniel Murphy
3
+ * All rights reserved.
4
+ *
5
+ * Redistribution and use in source and binary forms, with or without modification,
6
+ * are permitted provided that the following conditions are met:
7
+ * * Redistributions of source code must retain the above copyright notice,
8
+ * this list of conditions and the following disclaimer.
9
+ * * Redistributions in binary form must reproduce the above copyright notice,
10
+ * this list of conditions and the following disclaimer in the documentation
11
+ * and/or other materials provided with the distribution.
12
+ *
13
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
14
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
17
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
19
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
20
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
21
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
22
+ * POSSIBILITY OF SUCH DAMAGE.
23
+ ******************************************************************************/
24
+ package org.jbox2d.dynamics.contacts;
25
+
26
+ import org.jbox2d.common.Vec2;
27
+
28
+ public class Velocity {
29
+ public final Vec2 v = new Vec2();
30
+ public float w;
31
+ }
@@ -0,0 +1,258 @@
1
+ /*******************************************************************************
2
+ * Copyright (c) 2013, Daniel Murphy
3
+ * All rights reserved.
4
+ *
5
+ * Redistribution and use in source and binary forms, with or without modification,
6
+ * are permitted provided that the following conditions are met:
7
+ * * Redistributions of source code must retain the above copyright notice,
8
+ * this list of conditions and the following disclaimer.
9
+ * * Redistributions in binary form must reproduce the above copyright notice,
10
+ * this list of conditions and the following disclaimer in the documentation
11
+ * and/or other materials provided with the distribution.
12
+ *
13
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
14
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
17
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
19
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
20
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
21
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
22
+ * POSSIBILITY OF SUCH DAMAGE.
23
+ ******************************************************************************/
24
+ package org.jbox2d.dynamics.joints;
25
+
26
+ import org.jbox2d.common.MathUtils;
27
+ import org.jbox2d.common.Settings;
28
+ import org.jbox2d.common.Vec2;
29
+ import org.jbox2d.dynamics.Body;
30
+ import org.jbox2d.dynamics.SolverData;
31
+ import org.jbox2d.dynamics.World;
32
+ import org.jbox2d.dynamics.contacts.Position;
33
+ import org.jbox2d.dynamics.contacts.Velocity;
34
+
35
+ public class ConstantVolumeJoint extends Joint {
36
+
37
+ private final Body[] bodies;
38
+ private float[] targetLengths;
39
+ private float targetVolume;
40
+
41
+ private Vec2[] normals;
42
+ private float m_impulse = 0.0f;
43
+
44
+ private World world;
45
+
46
+ private DistanceJoint[] distanceJoints;
47
+
48
+ public Body[] getBodies() {
49
+ return bodies;
50
+ }
51
+
52
+ public DistanceJoint[] getJoints() {
53
+ return distanceJoints;
54
+ }
55
+
56
+ public void inflate(float factor) {
57
+ targetVolume *= factor;
58
+ }
59
+
60
+ public ConstantVolumeJoint(World argWorld, ConstantVolumeJointDef def) {
61
+ super(argWorld.getPool(), def);
62
+ world = argWorld;
63
+ if (def.bodies.size() <= 2) {
64
+ throw new IllegalArgumentException(
65
+ "You cannot create a constant volume joint with less than three bodies.");
66
+ }
67
+ bodies = def.bodies.toArray(new Body[0]);
68
+
69
+ targetLengths = new float[bodies.length];
70
+ for (int i = 0; i < targetLengths.length; ++i) {
71
+ final int next = (i == targetLengths.length - 1) ? 0 : i + 1;
72
+ float dist = bodies[i].getWorldCenter().sub(bodies[next].getWorldCenter()).length();
73
+ targetLengths[i] = dist;
74
+ }
75
+ targetVolume = getBodyArea();
76
+
77
+ if (def.joints != null && def.joints.size() != def.bodies.size()) {
78
+ throw new IllegalArgumentException(
79
+ "Incorrect joint definition. Joints have to correspond to the bodies");
80
+ }
81
+ if (def.joints == null) {
82
+ final DistanceJointDef djd = new DistanceJointDef();
83
+ distanceJoints = new DistanceJoint[bodies.length];
84
+ for (int i = 0; i < targetLengths.length; ++i) {
85
+ final int next = (i == targetLengths.length - 1) ? 0 : i + 1;
86
+ djd.frequencyHz = def.frequencyHz;// 20.0f;
87
+ djd.dampingRatio = def.dampingRatio;// 50.0f;
88
+ djd.collideConnected = def.collideConnected;
89
+ djd.initialize(bodies[i], bodies[next], bodies[i].getWorldCenter(),
90
+ bodies[next].getWorldCenter());
91
+ distanceJoints[i] = (DistanceJoint) world.createJoint(djd);
92
+ }
93
+ } else {
94
+ distanceJoints = def.joints.toArray(new DistanceJoint[0]);
95
+ }
96
+
97
+ normals = new Vec2[bodies.length];
98
+ for (int i = 0; i < normals.length; ++i) {
99
+ normals[i] = new Vec2();
100
+ }
101
+ }
102
+
103
+ @Override
104
+ public void destructor() {
105
+ for (int i = 0; i < distanceJoints.length; ++i) {
106
+ world.destroyJoint(distanceJoints[i]);
107
+ }
108
+ }
109
+
110
+ private float getBodyArea() {
111
+ float area = 0.0f;
112
+ for (int i = 0; i < bodies.length; ++i) {
113
+ final int next = (i == bodies.length - 1) ? 0 : i + 1;
114
+ area +=
115
+ bodies[i].getWorldCenter().x * bodies[next].getWorldCenter().y
116
+ - bodies[next].getWorldCenter().x * bodies[i].getWorldCenter().y;
117
+ }
118
+ area *= .5f;
119
+ return area;
120
+ }
121
+
122
+ private float getSolverArea(Position[] positions) {
123
+ float area = 0.0f;
124
+ for (int i = 0; i < bodies.length; ++i) {
125
+ final int next = (i == bodies.length - 1) ? 0 : i + 1;
126
+ area +=
127
+ positions[bodies[i].m_islandIndex].c.x * positions[bodies[next].m_islandIndex].c.y
128
+ - positions[bodies[next].m_islandIndex].c.x * positions[bodies[i].m_islandIndex].c.y;
129
+ }
130
+ area *= .5f;
131
+ return area;
132
+ }
133
+
134
+ private boolean constrainEdges(Position[] positions) {
135
+ float perimeter = 0.0f;
136
+ for (int i = 0; i < bodies.length; ++i) {
137
+ final int next = (i == bodies.length - 1) ? 0 : i + 1;
138
+ float dx = positions[bodies[next].m_islandIndex].c.x - positions[bodies[i].m_islandIndex].c.x;
139
+ float dy = positions[bodies[next].m_islandIndex].c.y - positions[bodies[i].m_islandIndex].c.y;
140
+ float dist = MathUtils.sqrt(dx * dx + dy * dy);
141
+ if (dist < Settings.EPSILON) {
142
+ dist = 1.0f;
143
+ }
144
+ normals[i].x = dy / dist;
145
+ normals[i].y = -dx / dist;
146
+ perimeter += dist;
147
+ }
148
+
149
+ final Vec2 delta = pool.popVec2();
150
+
151
+ float deltaArea = targetVolume - getSolverArea(positions);
152
+ float toExtrude = 0.5f * deltaArea / perimeter; // *relaxationFactor
153
+ // float sumdeltax = 0.0f;
154
+ boolean done = true;
155
+ for (int i = 0; i < bodies.length; ++i) {
156
+ final int next = (i == bodies.length - 1) ? 0 : i + 1;
157
+ delta.set(toExtrude * (normals[i].x + normals[next].x), toExtrude
158
+ * (normals[i].y + normals[next].y));
159
+ // sumdeltax += dx;
160
+ float normSqrd = delta.lengthSquared();
161
+ if (normSqrd > Settings.maxLinearCorrection * Settings.maxLinearCorrection) {
162
+ delta.mulLocal(Settings.maxLinearCorrection / MathUtils.sqrt(normSqrd));
163
+ }
164
+ if (normSqrd > Settings.linearSlop * Settings.linearSlop) {
165
+ done = false;
166
+ }
167
+ positions[bodies[next].m_islandIndex].c.x += delta.x;
168
+ positions[bodies[next].m_islandIndex].c.y += delta.y;
169
+ // bodies[next].m_linearVelocity.x += delta.x * step.inv_dt;
170
+ // bodies[next].m_linearVelocity.y += delta.y * step.inv_dt;
171
+ }
172
+
173
+ pool.pushVec2(1);
174
+ // System.out.println(sumdeltax);
175
+ return done;
176
+ }
177
+
178
+ @Override
179
+ public void initVelocityConstraints(final SolverData step) {
180
+ Velocity[] velocities = step.velocities;
181
+ Position[] positions = step.positions;
182
+ final Vec2[] d = pool.getVec2Array(bodies.length);
183
+
184
+ for (int i = 0; i < bodies.length; ++i) {
185
+ final int prev = (i == 0) ? bodies.length - 1 : i - 1;
186
+ final int next = (i == bodies.length - 1) ? 0 : i + 1;
187
+ d[i].set(positions[bodies[next].m_islandIndex].c);
188
+ d[i].subLocal(positions[bodies[prev].m_islandIndex].c);
189
+ }
190
+
191
+ if (step.step.warmStarting) {
192
+ m_impulse *= step.step.dtRatio;
193
+ // float lambda = -2.0f * crossMassSum / dotMassSum;
194
+ // System.out.println(crossMassSum + " " +dotMassSum);
195
+ // lambda = MathUtils.clamp(lambda, -Settings.maxLinearCorrection,
196
+ // Settings.maxLinearCorrection);
197
+ // m_impulse = lambda;
198
+ for (int i = 0; i < bodies.length; ++i) {
199
+ velocities[bodies[i].m_islandIndex].v.x += bodies[i].m_invMass * d[i].y * .5f * m_impulse;
200
+ velocities[bodies[i].m_islandIndex].v.y += bodies[i].m_invMass * -d[i].x * .5f * m_impulse;
201
+ }
202
+ } else {
203
+ m_impulse = 0.0f;
204
+ }
205
+ }
206
+
207
+ @Override
208
+ public boolean solvePositionConstraints(SolverData step) {
209
+ return constrainEdges(step.positions);
210
+ }
211
+
212
+ @Override
213
+ public void solveVelocityConstraints(final SolverData step) {
214
+ float crossMassSum = 0.0f;
215
+ float dotMassSum = 0.0f;
216
+
217
+ Velocity[] velocities = step.velocities;
218
+ Position[] positions = step.positions;
219
+ final Vec2 d[] = pool.getVec2Array(bodies.length);
220
+
221
+ for (int i = 0; i < bodies.length; ++i) {
222
+ final int prev = (i == 0) ? bodies.length - 1 : i - 1;
223
+ final int next = (i == bodies.length - 1) ? 0 : i + 1;
224
+ d[i].set(positions[bodies[next].m_islandIndex].c);
225
+ d[i].subLocal(positions[bodies[prev].m_islandIndex].c);
226
+ dotMassSum += (d[i].lengthSquared()) / bodies[i].getMass();
227
+ crossMassSum += Vec2.cross(velocities[bodies[i].m_islandIndex].v, d[i]);
228
+ }
229
+ float lambda = -2.0f * crossMassSum / dotMassSum;
230
+ // System.out.println(crossMassSum + " " +dotMassSum);
231
+ // lambda = MathUtils.clamp(lambda, -Settings.maxLinearCorrection,
232
+ // Settings.maxLinearCorrection);
233
+ m_impulse += lambda;
234
+ // System.out.println(m_impulse);
235
+ for (int i = 0; i < bodies.length; ++i) {
236
+ velocities[bodies[i].m_islandIndex].v.x += bodies[i].m_invMass * d[i].y * .5f * lambda;
237
+ velocities[bodies[i].m_islandIndex].v.y += bodies[i].m_invMass * -d[i].x * .5f * lambda;
238
+ }
239
+ }
240
+
241
+ /** No-op */
242
+ @Override
243
+ public void getAnchorA(Vec2 argOut) {}
244
+
245
+ /** No-op */
246
+ @Override
247
+ public void getAnchorB(Vec2 argOut) {}
248
+
249
+ /** No-op */
250
+ @Override
251
+ public void getReactionForce(float inv_dt, Vec2 argOut) {}
252
+
253
+ /** No-op */
254
+ @Override
255
+ public float getReactionTorque(float inv_dt) {
256
+ return 0;
257
+ }
258
+ }
@@ -0,0 +1,75 @@
1
+ /*******************************************************************************
2
+ * Copyright (c) 2013, Daniel Murphy
3
+ * All rights reserved.
4
+ *
5
+ * Redistribution and use in source and binary forms, with or without modification,
6
+ * are permitted provided that the following conditions are met:
7
+ * * Redistributions of source code must retain the above copyright notice,
8
+ * this list of conditions and the following disclaimer.
9
+ * * Redistributions in binary form must reproduce the above copyright notice,
10
+ * this list of conditions and the following disclaimer in the documentation
11
+ * and/or other materials provided with the distribution.
12
+ *
13
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
14
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
17
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
19
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
20
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
21
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
22
+ * POSSIBILITY OF SUCH DAMAGE.
23
+ ******************************************************************************/
24
+ package org.jbox2d.dynamics.joints;
25
+
26
+ import java.util.ArrayList;
27
+
28
+ import org.jbox2d.dynamics.Body;
29
+
30
+ /**
31
+ * Definition for a {@link ConstantVolumeJoint}, which connects a group a bodies together so they
32
+ * maintain a constant volume within them.
33
+ */
34
+ public class ConstantVolumeJointDef extends JointDef {
35
+ public float frequencyHz;
36
+ public float dampingRatio;
37
+
38
+ ArrayList<Body> bodies;
39
+ ArrayList<DistanceJoint> joints;
40
+
41
+ public ConstantVolumeJointDef() {
42
+ super(JointType.CONSTANT_VOLUME);
43
+ bodies = new ArrayList<Body>();
44
+ joints = null;
45
+ collideConnected = false;
46
+ frequencyHz = 0.0f;
47
+ dampingRatio = 0.0f;
48
+ }
49
+
50
+ /**
51
+ * Adds a body to the group
52
+ *
53
+ * @param argBody
54
+ */
55
+ public void addBody(Body argBody) {
56
+ bodies.add(argBody);
57
+ if (bodies.size() == 1) {
58
+ bodyA = argBody;
59
+ }
60
+ if (bodies.size() == 2) {
61
+ bodyB = argBody;
62
+ }
63
+ }
64
+
65
+ /**
66
+ * Adds a body and the pre-made distance joint. Should only be used for deserialization.
67
+ */
68
+ public void addBodyAndJoint(Body argBody, DistanceJoint argJoint) {
69
+ addBody(argBody);
70
+ if (joints == null) {
71
+ joints = new ArrayList<DistanceJoint>();
72
+ }
73
+ joints.add(argJoint);
74
+ }
75
+ }