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,294 @@
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
+ /**
25
+ * Created at 7:27:32 AM Jan 20, 2011
26
+ */
27
+ package org.jbox2d.dynamics.joints;
28
+
29
+ import org.jbox2d.common.Mat22;
30
+ import org.jbox2d.common.MathUtils;
31
+ import org.jbox2d.common.Rot;
32
+ import org.jbox2d.common.Vec2;
33
+ import org.jbox2d.dynamics.SolverData;
34
+ import org.jbox2d.pooling.IWorldPool;
35
+
36
+ /**
37
+ * @author Daniel Murphy
38
+ */
39
+ public class FrictionJoint extends Joint {
40
+
41
+ private final Vec2 m_localAnchorA;
42
+ private final Vec2 m_localAnchorB;
43
+
44
+ // Solver shared
45
+ private final Vec2 m_linearImpulse;
46
+ private float m_angularImpulse;
47
+ private float m_maxForce;
48
+ private float m_maxTorque;
49
+
50
+ // Solver temp
51
+ private int m_indexA;
52
+ private int m_indexB;
53
+ private final Vec2 m_rA = new Vec2();
54
+ private final Vec2 m_rB = new Vec2();
55
+ private final Vec2 m_localCenterA = new Vec2();
56
+ private final Vec2 m_localCenterB = new Vec2();
57
+ private float m_invMassA;
58
+ private float m_invMassB;
59
+ private float m_invIA;
60
+ private float m_invIB;
61
+ private final Mat22 m_linearMass = new Mat22();
62
+ private float m_angularMass;
63
+
64
+ protected FrictionJoint(IWorldPool argWorldPool, FrictionJointDef def) {
65
+ super(argWorldPool, def);
66
+ m_localAnchorA = new Vec2(def.localAnchorA);
67
+ m_localAnchorB = new Vec2(def.localAnchorB);
68
+
69
+ m_linearImpulse = new Vec2();
70
+ m_angularImpulse = 0.0f;
71
+
72
+ m_maxForce = def.maxForce;
73
+ m_maxTorque = def.maxTorque;
74
+ }
75
+
76
+ public Vec2 getLocalAnchorA() {
77
+ return m_localAnchorA;
78
+ }
79
+
80
+ public Vec2 getLocalAnchorB() {
81
+ return m_localAnchorB;
82
+ }
83
+
84
+ @Override
85
+ public void getAnchorA(Vec2 argOut) {
86
+ m_bodyA.getWorldPointToOut(m_localAnchorA, argOut);
87
+ }
88
+
89
+ @Override
90
+ public void getAnchorB(Vec2 argOut) {
91
+ m_bodyB.getWorldPointToOut(m_localAnchorB, argOut);
92
+ }
93
+
94
+ @Override
95
+ public void getReactionForce(float inv_dt, Vec2 argOut) {
96
+ argOut.set(m_linearImpulse).mulLocal(inv_dt);
97
+ }
98
+
99
+ @Override
100
+ public float getReactionTorque(float inv_dt) {
101
+ return inv_dt * m_angularImpulse;
102
+ }
103
+
104
+ public void setMaxForce(float force) {
105
+ assert (force >= 0.0f);
106
+ m_maxForce = force;
107
+ }
108
+
109
+ public float getMaxForce() {
110
+ return m_maxForce;
111
+ }
112
+
113
+ public void setMaxTorque(float torque) {
114
+ assert (torque >= 0.0f);
115
+ m_maxTorque = torque;
116
+ }
117
+
118
+ public float getMaxTorque() {
119
+ return m_maxTorque;
120
+ }
121
+
122
+ /**
123
+ * @see org.jbox2d.dynamics.joints.Joint#initVelocityConstraints(org.jbox2d.dynamics.TimeStep)
124
+ */
125
+ @Override
126
+ public void initVelocityConstraints(final SolverData data) {
127
+ m_indexA = m_bodyA.m_islandIndex;
128
+ m_indexB = m_bodyB.m_islandIndex;
129
+ m_localCenterA.set(m_bodyA.m_sweep.localCenter);
130
+ m_localCenterB.set(m_bodyB.m_sweep.localCenter);
131
+ m_invMassA = m_bodyA.m_invMass;
132
+ m_invMassB = m_bodyB.m_invMass;
133
+ m_invIA = m_bodyA.m_invI;
134
+ m_invIB = m_bodyB.m_invI;
135
+
136
+ float aA = data.positions[m_indexA].a;
137
+ Vec2 vA = data.velocities[m_indexA].v;
138
+ float wA = data.velocities[m_indexA].w;
139
+
140
+ float aB = data.positions[m_indexB].a;
141
+ Vec2 vB = data.velocities[m_indexB].v;
142
+ float wB = data.velocities[m_indexB].w;
143
+
144
+
145
+ final Vec2 temp = pool.popVec2();
146
+ final Rot qA = pool.popRot();
147
+ final Rot qB = pool.popRot();
148
+
149
+ qA.set(aA);
150
+ qB.set(aB);
151
+
152
+ // Compute the effective mass matrix.
153
+ Rot.mulToOutUnsafe(qA, temp.set(m_localAnchorA).subLocal(m_localCenterA), m_rA);
154
+ Rot.mulToOutUnsafe(qB, temp.set(m_localAnchorB).subLocal(m_localCenterB), m_rB);
155
+
156
+ // J = [-I -r1_skew I r2_skew]
157
+ // [ 0 -1 0 1]
158
+ // r_skew = [-ry; rx]
159
+
160
+ // Matlab
161
+ // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]
162
+ // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]
163
+ // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]
164
+
165
+ float mA = m_invMassA, mB = m_invMassB;
166
+ float iA = m_invIA, iB = m_invIB;
167
+
168
+ final Mat22 K = pool.popMat22();
169
+ K.ex.x = mA + mB + iA * m_rA.y * m_rA.y + iB * m_rB.y * m_rB.y;
170
+ K.ex.y = -iA * m_rA.x * m_rA.y - iB * m_rB.x * m_rB.y;
171
+ K.ey.x = K.ex.y;
172
+ K.ey.y = mA + mB + iA * m_rA.x * m_rA.x + iB * m_rB.x * m_rB.x;
173
+
174
+ K.invertToOut(m_linearMass);
175
+
176
+ m_angularMass = iA + iB;
177
+ if (m_angularMass > 0.0f) {
178
+ m_angularMass = 1.0f / m_angularMass;
179
+ }
180
+
181
+ if (data.step.warmStarting) {
182
+ // Scale impulses to support a variable time step.
183
+ m_linearImpulse.mulLocal(data.step.dtRatio);
184
+ m_angularImpulse *= data.step.dtRatio;
185
+
186
+ final Vec2 P = pool.popVec2();
187
+ P.set(m_linearImpulse);
188
+
189
+ temp.set(P).mulLocal(mA);
190
+ vA.subLocal(temp);
191
+ wA -= iA * (Vec2.cross(m_rA, P) + m_angularImpulse);
192
+
193
+ temp.set(P).mulLocal(mB);
194
+ vB.addLocal(temp);
195
+ wB += iB * (Vec2.cross(m_rB, P) + m_angularImpulse);
196
+
197
+ pool.pushVec2(1);
198
+ } else {
199
+ m_linearImpulse.setZero();
200
+ m_angularImpulse = 0.0f;
201
+ }
202
+ // data.velocities[m_indexA].v.set(vA);
203
+ if( data.velocities[m_indexA].w != wA) {
204
+ assert(data.velocities[m_indexA].w != wA);
205
+ }
206
+ data.velocities[m_indexA].w = wA;
207
+ // data.velocities[m_indexB].v.set(vB);
208
+ data.velocities[m_indexB].w = wB;
209
+
210
+ pool.pushRot(2);
211
+ pool.pushVec2(1);
212
+ pool.pushMat22(1);
213
+ }
214
+
215
+ @Override
216
+ public void solveVelocityConstraints(final SolverData data) {
217
+ Vec2 vA = data.velocities[m_indexA].v;
218
+ float wA = data.velocities[m_indexA].w;
219
+ Vec2 vB = data.velocities[m_indexB].v;
220
+ float wB = data.velocities[m_indexB].w;
221
+
222
+ float mA = m_invMassA, mB = m_invMassB;
223
+ float iA = m_invIA, iB = m_invIB;
224
+
225
+ float h = data.step.dt;
226
+
227
+ // Solve angular friction
228
+ {
229
+ float Cdot = wB - wA;
230
+ float impulse = -m_angularMass * Cdot;
231
+
232
+ float oldImpulse = m_angularImpulse;
233
+ float maxImpulse = h * m_maxTorque;
234
+ m_angularImpulse = MathUtils.clamp(m_angularImpulse + impulse, -maxImpulse, maxImpulse);
235
+ impulse = m_angularImpulse - oldImpulse;
236
+
237
+ wA -= iA * impulse;
238
+ wB += iB * impulse;
239
+ }
240
+
241
+ // Solve linear friction
242
+ {
243
+ final Vec2 Cdot = pool.popVec2();
244
+ final Vec2 temp = pool.popVec2();
245
+
246
+ Vec2.crossToOutUnsafe(wA, m_rA, temp);
247
+ Vec2.crossToOutUnsafe(wB, m_rB, Cdot);
248
+ Cdot.addLocal(vB).subLocal(vA).subLocal(temp);
249
+
250
+ final Vec2 impulse = pool.popVec2();
251
+ Mat22.mulToOutUnsafe(m_linearMass, Cdot, impulse);
252
+ impulse.negateLocal();
253
+
254
+
255
+ final Vec2 oldImpulse = pool.popVec2();
256
+ oldImpulse.set(m_linearImpulse);
257
+ m_linearImpulse.addLocal(impulse);
258
+
259
+ float maxImpulse = h * m_maxForce;
260
+
261
+ if (m_linearImpulse.lengthSquared() > maxImpulse * maxImpulse) {
262
+ m_linearImpulse.normalize();
263
+ m_linearImpulse.mulLocal(maxImpulse);
264
+ }
265
+
266
+ impulse.set(m_linearImpulse).subLocal(oldImpulse);
267
+
268
+ temp.set(impulse).mulLocal(mA);
269
+ vA.subLocal(temp);
270
+ wA -= iA * Vec2.cross(m_rA, impulse);
271
+
272
+ temp.set(impulse).mulLocal(mB);
273
+ vB.addLocal(temp);
274
+ wB += iB * Vec2.cross(m_rB, impulse);
275
+
276
+ }
277
+
278
+ // data.velocities[m_indexA].v.set(vA);
279
+ if( data.velocities[m_indexA].w != wA) {
280
+ assert(data.velocities[m_indexA].w != wA);
281
+ }
282
+ data.velocities[m_indexA].w = wA;
283
+
284
+ // data.velocities[m_indexB].v.set(vB);
285
+ data.velocities[m_indexB].w = wB;
286
+
287
+ pool.pushVec2(4);
288
+ }
289
+
290
+ @Override
291
+ public boolean solvePositionConstraints(final SolverData data) {
292
+ return true;
293
+ }
294
+ }
@@ -0,0 +1,78 @@
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
+ /**
25
+ * Created at 7:23:39 AM Jan 20, 2011
26
+ */
27
+ package org.jbox2d.dynamics.joints;
28
+
29
+ import org.jbox2d.common.Vec2;
30
+ import org.jbox2d.dynamics.Body;
31
+
32
+ /**
33
+ * Friction joint definition.
34
+ *
35
+ * @author Daniel Murphy
36
+ */
37
+ public class FrictionJointDef extends JointDef {
38
+
39
+
40
+ /**
41
+ * The local anchor point relative to bodyA's origin.
42
+ */
43
+ public final Vec2 localAnchorA;
44
+
45
+ /**
46
+ * The local anchor point relative to bodyB's origin.
47
+ */
48
+ public final Vec2 localAnchorB;
49
+
50
+ /**
51
+ * The maximum friction force in N.
52
+ */
53
+ public float maxForce;
54
+
55
+ /**
56
+ * The maximum friction torque in N-m.
57
+ */
58
+ public float maxTorque;
59
+
60
+ public FrictionJointDef() {
61
+ super(JointType.FRICTION);
62
+ localAnchorA = new Vec2();
63
+ localAnchorB = new Vec2();
64
+ maxForce = 0f;
65
+ maxTorque = 0f;
66
+ }
67
+
68
+ /**
69
+ * Initialize the bodies, anchors, axis, and reference angle using the world anchor and world
70
+ * axis.
71
+ */
72
+ public void initialize(Body bA, Body bB, Vec2 anchor) {
73
+ bodyA = bA;
74
+ bodyB = bB;
75
+ bA.getLocalPointToOut(anchor, localAnchorA);
76
+ bB.getLocalPointToOut(anchor, localAnchorB);
77
+ }
78
+ }