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,174 @@
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.common;
25
+
26
+ /**
27
+ * Orientated bounding box viewport transform
28
+ *
29
+ * @author Daniel Murphy
30
+ */
31
+ public class OBBViewportTransform implements IViewportTransform {
32
+
33
+ public static class OBB {
34
+ public final Mat22 R = new Mat22();
35
+ public final Vec2 center = new Vec2();
36
+ public final Vec2 extents = new Vec2();
37
+ }
38
+
39
+ protected final OBB box = new OBB();
40
+ private boolean yFlip = false;
41
+ private final Mat22 yFlipMat = new Mat22(1, 0, 0, -1);
42
+
43
+ public OBBViewportTransform() {
44
+ box.R.setIdentity();
45
+ }
46
+
47
+ public void set(OBBViewportTransform vpt) {
48
+ box.center.set(vpt.box.center);
49
+ box.extents.set(vpt.box.extents);
50
+ box.R.set(vpt.box.R);
51
+ yFlip = vpt.yFlip;
52
+ }
53
+
54
+ @Override
55
+ public void setCamera(float x, float y, float scale) {
56
+ box.center.set(x, y);
57
+ Mat22.createScaleTransform(scale, box.R);
58
+ }
59
+
60
+ @Override
61
+ public Vec2 getExtents() {
62
+ return box.extents;
63
+ }
64
+
65
+ @Override
66
+ public Mat22 getMat22Representation() {
67
+ return box.R;
68
+ }
69
+
70
+ @Override
71
+ public void setExtents(Vec2 argExtents) {
72
+ box.extents.set(argExtents);
73
+ }
74
+
75
+ @Override
76
+ public void setExtents(float halfWidth, float halfHeight) {
77
+ box.extents.set(halfWidth, halfHeight);
78
+ }
79
+
80
+ @Override
81
+ public Vec2 getCenter() {
82
+ return box.center;
83
+ }
84
+
85
+ @Override
86
+ public void setCenter(Vec2 argPos) {
87
+ box.center.set(argPos);
88
+ }
89
+
90
+ @Override
91
+ public void setCenter(float x, float y) {
92
+ box.center.set(x, y);
93
+ }
94
+
95
+ /**
96
+ * Gets the transform of the viewport, transforms around the center. Not a copy.
97
+ * @return
98
+ */
99
+ public Mat22 getTransform() {
100
+ return box.R;
101
+ }
102
+
103
+ /**
104
+ * Sets the transform of the viewport. Transforms about the center.
105
+ * @param transform
106
+ */
107
+ public void setTransform(Mat22 transform) {
108
+ box.R.set(transform);
109
+ }
110
+
111
+ /**
112
+ * Multiplies the obb transform by the given transform
113
+ */
114
+ @Override
115
+ public void mulByTransform(Mat22 transform) {
116
+ box.R.mulLocal(transform);
117
+ }
118
+
119
+ @Override
120
+ public boolean isYFlip() {
121
+ return yFlip;
122
+ }
123
+
124
+ @Override
125
+ public void setYFlip(boolean yFlip) {
126
+ this.yFlip = yFlip;
127
+ }
128
+
129
+ private final Mat22 inv = new Mat22();
130
+
131
+ @Override
132
+ public void getScreenVectorToWorld(Vec2 screen, Vec2 world) {
133
+ box.R.invertToOut(inv);
134
+ inv.mulToOut(screen, world);
135
+ if (yFlip) {
136
+ yFlipMat.mulToOut(world, world);
137
+ }
138
+ }
139
+
140
+ @Override
141
+ public void getWorldVectorToScreen(Vec2 world, Vec2 screen) {
142
+ box.R.mulToOut(world, screen);
143
+ if (yFlip) {
144
+ yFlipMat.mulToOut(screen, screen);
145
+ }
146
+ }
147
+
148
+ @Override
149
+ public void getWorldToScreen(Vec2 world, Vec2 screen) {
150
+ screen.x = world.x - box.center.x;
151
+ screen.y = world.y - box.center.y;
152
+ box.R.mulToOut(screen, screen);
153
+ if (yFlip) {
154
+ yFlipMat.mulToOut(screen, screen);
155
+ }
156
+ screen.x += box.extents.x;
157
+ screen.y += box.extents.y;
158
+ }
159
+
160
+ private final Mat22 inv2 = new Mat22();
161
+
162
+ @Override
163
+ public void getScreenToWorld(Vec2 screen, Vec2 world) {
164
+ world.x = screen.x - box.extents.x;
165
+ world.y = screen.y - box.extents.y;
166
+ if (yFlip) {
167
+ yFlipMat.mulToOut(world, world);
168
+ }
169
+ box.R.invertToOut(inv2);
170
+ inv2.mulToOut(world, world);
171
+ world.x += box.center.x;
172
+ world.y += box.center.y;
173
+ }
174
+ }
@@ -0,0 +1,46 @@
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.common;
25
+
26
+ /**
27
+ * Contains methods from MathUtils that rely on JVM features. These are separated out from
28
+ * MathUtils so that they can be overridden when compiling for GWT.
29
+ */
30
+ class PlatformMathUtils {
31
+
32
+ private static final float SHIFT23 = 1 << 23;
33
+ private static final float INV_SHIFT23 = 1.0f / SHIFT23;
34
+
35
+ public static final float fastPow(float a, float b) {
36
+ float x = Float.floatToRawIntBits(a);
37
+ x *= INV_SHIFT23;
38
+ x -= 127;
39
+ float y = x - (x >= 0 ? (int) x : (int) x - 1);
40
+ b *= x + (y - y * y) * 0.346607f;
41
+ y = b - (b >= 0 ? (int) b : (int) b - 1);
42
+ y = (y - y * y) * 0.33971f;
43
+ return Float.intBitsToFloat((int) ((b + 127 - y) * SHIFT23));
44
+ }
45
+ }
46
+
@@ -0,0 +1,37 @@
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.common;
25
+
26
+ // updated to rev 100
27
+
28
+ public class RaycastResult {
29
+ public float lambda = 0.0f;
30
+ public final Vec2 normal = new Vec2();
31
+
32
+ public RaycastResult set(RaycastResult argOther){
33
+ lambda = argOther.lambda;
34
+ normal.set( argOther.normal);
35
+ return this;
36
+ }
37
+ }
@@ -0,0 +1,150 @@
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.common;
25
+
26
+ import java.io.Serializable;
27
+
28
+ /**
29
+ * Represents a rotation
30
+ *
31
+ * @author Daniel
32
+ */
33
+ public class Rot implements Serializable {
34
+ private static final long serialVersionUID = 1L;
35
+
36
+ public float s, c; // sin and cos
37
+
38
+ public Rot() {
39
+ setIdentity();
40
+ }
41
+
42
+ public Rot(float angle) {
43
+ set(angle);
44
+ }
45
+
46
+ public float getSin() {
47
+ return s;
48
+ }
49
+
50
+ @Override
51
+ public String toString() {
52
+ return "Rot(s:" + s + ", c:" + c + ")";
53
+ }
54
+
55
+ public float getCos() {
56
+ return c;
57
+ }
58
+
59
+ public Rot set(float angle) {
60
+ s = MathUtils.sin(angle);
61
+ c = MathUtils.cos(angle);
62
+ return this;
63
+ }
64
+
65
+ public Rot set(Rot other) {
66
+ s = other.s;
67
+ c = other.c;
68
+ return this;
69
+ }
70
+
71
+ public Rot setIdentity() {
72
+ s = 0;
73
+ c = 1;
74
+ return this;
75
+ }
76
+
77
+ public float getAngle() {
78
+ return MathUtils.atan2(s, c);
79
+ }
80
+
81
+ public void getXAxis(Vec2 xAxis) {
82
+ xAxis.set(c, s);
83
+ }
84
+
85
+ public void getYAxis(Vec2 yAxis) {
86
+ yAxis.set(-s, c);
87
+ }
88
+
89
+ // @Override // annotation omitted for GWT-compatibility
90
+ public Rot clone() {
91
+ Rot copy = new Rot();
92
+ copy.s = s;
93
+ copy.c = c;
94
+ return copy;
95
+ }
96
+
97
+ public static final void mul(Rot q, Rot r, Rot out) {
98
+ float tempc = q.c * r.c - q.s * r.s;
99
+ out.s = q.s * r.c + q.c * r.s;
100
+ out.c = tempc;
101
+ }
102
+
103
+ public static final void mulUnsafe(Rot q, Rot r, Rot out) {
104
+ assert (r != out);
105
+ assert (q != out);
106
+ // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc]
107
+ // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc]
108
+ // s = qs * rc + qc * rs
109
+ // c = qc * rc - qs * rs
110
+ out.s = q.s * r.c + q.c * r.s;
111
+ out.c = q.c * r.c - q.s * r.s;
112
+ }
113
+
114
+ public static final void mulTrans(Rot q, Rot r, Rot out) {
115
+ final float tempc = q.c * r.c + q.s * r.s;
116
+ out.s = q.c * r.s - q.s * r.c;
117
+ out.c = tempc;
118
+ }
119
+
120
+ public static final void mulTransUnsafe(Rot q, Rot r, Rot out) {
121
+ // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc]
122
+ // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc]
123
+ // s = qc * rs - qs * rc
124
+ // c = qc * rc + qs * rs
125
+ out.s = q.c * r.s - q.s * r.c;
126
+ out.c = q.c * r.c + q.s * r.s;
127
+ }
128
+
129
+ public static final void mulToOut(Rot q, Vec2 v, Vec2 out) {
130
+ float tempy = q.s * v.x + q.c * v.y;
131
+ out.x = q.c * v.x - q.s * v.y;
132
+ out.y = tempy;
133
+ }
134
+
135
+ public static final void mulToOutUnsafe(Rot q, Vec2 v, Vec2 out) {
136
+ out.x = q.c * v.x - q.s * v.y;
137
+ out.y = q.s * v.x + q.c * v.y;
138
+ }
139
+
140
+ public static final void mulTrans(Rot q, Vec2 v, Vec2 out) {
141
+ final float tempy = -q.s * v.x + q.c * v.y;
142
+ out.x = q.c * v.x + q.s * v.y;
143
+ out.y = tempy;
144
+ }
145
+
146
+ public static final void mulTransUnsafe(Rot q, Vec2 v, Vec2 out) {
147
+ out.x = q.c * v.x + q.s * v.y;
148
+ out.y = -q.s * v.x + q.c * v.y;
149
+ }
150
+ }
@@ -0,0 +1,246 @@
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.common;
25
+
26
+ /**
27
+ * Global tuning constants based on MKS units and various integer maximums (vertices per shape,
28
+ * pairs, etc.).
29
+ */
30
+ public class Settings {
31
+
32
+ /** A "close to zero" float epsilon value for use */
33
+ public static final float EPSILON = 1.1920928955078125E-7f;
34
+
35
+ /** Pi. */
36
+ public static final float PI = (float) Math.PI;
37
+
38
+ // JBox2D specific settings
39
+ public static boolean FAST_ABS = true;
40
+ public static boolean FAST_FLOOR = true;
41
+ public static boolean FAST_CEIL = true;
42
+ public static boolean FAST_ROUND = true;
43
+ public static boolean FAST_ATAN2 = true;
44
+ public static boolean FAST_POW = true;
45
+ public static int CONTACT_STACK_INIT_SIZE = 10;
46
+ public static boolean SINCOS_LUT_ENABLED = true;
47
+ /**
48
+ * smaller the precision, the larger the table. If a small table is used (eg, precision is .006 or
49
+ * greater), make sure you set the table to lerp it's results. Accuracy chart is in the MathUtils
50
+ * source. Or, run the tests yourself in {@link SinCosTest}.</br> </br> Good lerp precision
51
+ * values:
52
+ * <ul>
53
+ * <li>.0092</li>
54
+ * <li>.008201</li>
55
+ * <li>.005904</li>
56
+ * <li>.005204</li>
57
+ * <li>.004305</li>
58
+ * <li>.002807</li>
59
+ * <li>.001508</li>
60
+ * <li>9.32500E-4</li>
61
+ * <li>7.48000E-4</li>
62
+ * <li>8.47000E-4</li>
63
+ * <li>.0005095</li>
64
+ * <li>.0001098</li>
65
+ * <li>9.50499E-5</li>
66
+ * <li>6.08500E-5</li>
67
+ * <li>3.07000E-5</li>
68
+ * <li>1.53999E-5</li>
69
+ * </ul>
70
+ */
71
+ public static final float SINCOS_LUT_PRECISION = .00011f;
72
+ public static final int SINCOS_LUT_LENGTH = (int) Math.ceil(Math.PI * 2 / SINCOS_LUT_PRECISION);
73
+ /**
74
+ * Use if the table's precision is large (eg .006 or greater). Although it is more expensive, it
75
+ * greatly increases accuracy. Look in the MathUtils source for some test results on the accuracy
76
+ * and speed of lerp vs non lerp. Or, run the tests yourself in {@link SinCosTest}.
77
+ */
78
+ public static boolean SINCOS_LUT_LERP = false;
79
+
80
+
81
+ // Collision
82
+
83
+ /**
84
+ * The maximum number of contact points between two convex shapes.
85
+ */
86
+ public static int maxManifoldPoints = 2;
87
+
88
+ /**
89
+ * The maximum number of vertices on a convex polygon.
90
+ */
91
+ public static int maxPolygonVertices = 8;
92
+
93
+ /**
94
+ * This is used to fatten AABBs in the dynamic tree. This allows proxies to move by a small amount
95
+ * without triggering a tree adjustment. This is in meters.
96
+ */
97
+ public static float aabbExtension = 0.1f;
98
+
99
+ /**
100
+ * This is used to fatten AABBs in the dynamic tree. This is used to predict the future position
101
+ * based on the current displacement. This is a dimensionless multiplier.
102
+ */
103
+ public static float aabbMultiplier = 2.0f;
104
+
105
+ /**
106
+ * A small length used as a collision and constraint tolerance. Usually it is chosen to be
107
+ * numerically significant, but visually insignificant.
108
+ */
109
+ public static float linearSlop = 0.005f;
110
+
111
+ /**
112
+ * A small angle used as a collision and constraint tolerance. Usually it is chosen to be
113
+ * numerically significant, but visually insignificant.
114
+ */
115
+ public static float angularSlop = (2.0f / 180.0f * PI);
116
+
117
+ /**
118
+ * The radius of the polygon/edge shape skin. This should not be modified. Making this smaller
119
+ * means polygons will have and insufficient for continuous collision. Making it larger may create
120
+ * artifacts for vertex collision.
121
+ */
122
+ public static float polygonRadius = (2.0f * linearSlop);
123
+
124
+ /** Maximum number of sub-steps per contact in continuous physics simulation. */
125
+ public static int maxSubSteps = 8;
126
+
127
+ // Dynamics
128
+
129
+ /**
130
+ * Maximum number of contacts to be handled to solve a TOI island.
131
+ */
132
+ public static int maxTOIContacts = 32;
133
+
134
+ /**
135
+ * A velocity threshold for elastic collisions. Any collision with a relative linear velocity
136
+ * below this threshold will be treated as inelastic.
137
+ */
138
+ public static float velocityThreshold = 1.0f;
139
+
140
+ /**
141
+ * The maximum linear position correction used when solving constraints. This helps to prevent
142
+ * overshoot.
143
+ */
144
+ public static float maxLinearCorrection = 0.2f;
145
+
146
+ /**
147
+ * The maximum angular position correction used when solving constraints. This helps to prevent
148
+ * overshoot.
149
+ */
150
+ public static float maxAngularCorrection = (8.0f / 180.0f * PI);
151
+
152
+ /**
153
+ * The maximum linear velocity of a body. This limit is very large and is used to prevent
154
+ * numerical problems. You shouldn't need to adjust this.
155
+ */
156
+ public static float maxTranslation = 2.0f;
157
+ public static float maxTranslationSquared = (maxTranslation * maxTranslation);
158
+
159
+ /**
160
+ * The maximum angular velocity of a body. This limit is very large and is used to prevent
161
+ * numerical problems. You shouldn't need to adjust this.
162
+ */
163
+ public static float maxRotation = (0.5f * PI);
164
+ public static float maxRotationSquared = (maxRotation * maxRotation);
165
+
166
+ /**
167
+ * This scale factor controls how fast overlap is resolved. Ideally this would be 1 so that
168
+ * overlap is removed in one time step. However using values close to 1 often lead to overshoot.
169
+ */
170
+ public static float baumgarte = 0.2f;
171
+ public static float toiBaugarte = 0.75f;
172
+
173
+
174
+ // Sleep
175
+
176
+ /**
177
+ * The time that a body must be still before it will go to sleep.
178
+ */
179
+ public static float timeToSleep = 0.5f;
180
+
181
+ /**
182
+ * A body cannot sleep if its linear velocity is above this tolerance.
183
+ */
184
+ public static float linearSleepTolerance = 0.01f;
185
+
186
+ /**
187
+ * A body cannot sleep if its angular velocity is above this tolerance.
188
+ */
189
+ public static float angularSleepTolerance = (2.0f / 180.0f * PI);
190
+
191
+ // Particle
192
+
193
+ /**
194
+ * A symbolic constant that stands for particle allocation error.
195
+ */
196
+ public static final int invalidParticleIndex = (-1);
197
+
198
+ /**
199
+ * The standard distance between particles, divided by the particle radius.
200
+ */
201
+ public static final float particleStride = 0.75f;
202
+
203
+ /**
204
+ * The minimum particle weight that produces pressure.
205
+ */
206
+ public static final float minParticleWeight = 1.0f;
207
+
208
+ /**
209
+ * The upper limit for particle weight used in pressure calculation.
210
+ */
211
+ public static final float maxParticleWeight = 5.0f;
212
+
213
+ /**
214
+ * The maximum distance between particles in a triad, divided by the particle radius.
215
+ */
216
+ public static final int maxTriadDistance = 2;
217
+ public static final int maxTriadDistanceSquared = (maxTriadDistance * maxTriadDistance);
218
+
219
+ /**
220
+ * The initial size of particle data buffers.
221
+ */
222
+ public static final int minParticleBufferCapacity = 256;
223
+
224
+
225
+ /**
226
+ * Friction mixing law. Feel free to customize this. TODO djm: add customization
227
+ *
228
+ * @param friction1
229
+ * @param friction2
230
+ * @return
231
+ */
232
+ public static float mixFriction(float friction1, float friction2) {
233
+ return MathUtils.sqrt(friction1 * friction2);
234
+ }
235
+
236
+ /**
237
+ * Restitution mixing law. Feel free to customize this. TODO djm: add customization
238
+ *
239
+ * @param restitution1
240
+ * @param restitution2
241
+ * @return
242
+ */
243
+ public static float mixRestitution(float restitution1, float restitution2) {
244
+ return restitution1 > restitution2 ? restitution1 : restitution2;
245
+ }
246
+ }