box2d-rails 0.0.1
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.
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/box2d-rails.gemspec +20 -0
- data/lib/box2d-rails.rb +8 -0
- data/lib/box2d-rails/version.rb +5 -0
- data/vendor/assets/javascripts/box2d/collision/ClipVertex.js +35 -0
- data/vendor/assets/javascripts/box2d/collision/Features.js +61 -0
- data/vendor/assets/javascripts/box2d/collision/b2AABB.js +45 -0
- data/vendor/assets/javascripts/box2d/collision/b2Bound.js +43 -0
- data/vendor/assets/javascripts/box2d/collision/b2BoundValues.js +31 -0
- data/vendor/assets/javascripts/box2d/collision/b2BroadPhase.js +898 -0
- data/vendor/assets/javascripts/box2d/collision/b2BufferedPair.js +26 -0
- data/vendor/assets/javascripts/box2d/collision/b2Collision.js +738 -0
- data/vendor/assets/javascripts/box2d/collision/b2ContactID.js +52 -0
- data/vendor/assets/javascripts/box2d/collision/b2ContactPoint.js +35 -0
- data/vendor/assets/javascripts/box2d/collision/b2Distance.js +333 -0
- data/vendor/assets/javascripts/box2d/collision/b2Manifold.js +34 -0
- data/vendor/assets/javascripts/box2d/collision/b2OBB.js +34 -0
- data/vendor/assets/javascripts/box2d/collision/b2Pair.js +60 -0
- data/vendor/assets/javascripts/box2d/collision/b2PairCallback.js +34 -0
- data/vendor/assets/javascripts/box2d/collision/b2PairManager.js +386 -0
- data/vendor/assets/javascripts/box2d/collision/b2Proxy.js +40 -0
- data/vendor/assets/javascripts/box2d/collision/shapes/b2BoxDef.js +49 -0
- data/vendor/assets/javascripts/box2d/collision/shapes/b2CircleDef.js +49 -0
- data/vendor/assets/javascripts/box2d/collision/shapes/b2CircleShape.js +198 -0
- data/vendor/assets/javascripts/box2d/collision/shapes/b2MassData.js +36 -0
- data/vendor/assets/javascripts/box2d/collision/shapes/b2PolyDef.js +58 -0
- data/vendor/assets/javascripts/box2d/collision/shapes/b2PolyShape.js +492 -0
- data/vendor/assets/javascripts/box2d/collision/shapes/b2Shape.js +339 -0
- data/vendor/assets/javascripts/box2d/collision/shapes/b2ShapeDef.js +109 -0
- data/vendor/assets/javascripts/box2d/common/b2Settings.js +72 -0
- data/vendor/assets/javascripts/box2d/common/math/b2Mat22.js +130 -0
- data/vendor/assets/javascripts/box2d/common/math/b2Math.js +218 -0
- data/vendor/assets/javascripts/box2d/common/math/b2Vec2.js +131 -0
- data/vendor/assets/javascripts/box2d/dynamics/b2Body.js +469 -0
- data/vendor/assets/javascripts/box2d/dynamics/b2BodyDef.js +69 -0
- data/vendor/assets/javascripts/box2d/dynamics/b2CollisionFilter.js +42 -0
- data/vendor/assets/javascripts/box2d/dynamics/b2ContactManager.js +337 -0
- data/vendor/assets/javascripts/box2d/dynamics/b2Island.js +331 -0
- data/vendor/assets/javascripts/box2d/dynamics/b2TimeStep.js +27 -0
- data/vendor/assets/javascripts/box2d/dynamics/b2World.js +522 -0
- data/vendor/assets/javascripts/box2d/dynamics/b2WorldListener.js +52 -0
- data/vendor/assets/javascripts/box2d/dynamics/contacts/b2CircleContact.js +102 -0
- data/vendor/assets/javascripts/box2d/dynamics/contacts/b2Conservative.js +228 -0
- data/vendor/assets/javascripts/box2d/dynamics/contacts/b2Contact.js +201 -0
- data/vendor/assets/javascripts/box2d/dynamics/contacts/b2ContactConstraint.js +45 -0
- data/vendor/assets/javascripts/box2d/dynamics/contacts/b2ContactConstraintPoint.js +40 -0
- data/vendor/assets/javascripts/box2d/dynamics/contacts/b2ContactNode.js +33 -0
- data/vendor/assets/javascripts/box2d/dynamics/contacts/b2ContactRegister.js +30 -0
- data/vendor/assets/javascripts/box2d/dynamics/contacts/b2ContactSolver.js +537 -0
- data/vendor/assets/javascripts/box2d/dynamics/contacts/b2NullContact.js +65 -0
- data/vendor/assets/javascripts/box2d/dynamics/contacts/b2PolyAndCircleContact.js +103 -0
- data/vendor/assets/javascripts/box2d/dynamics/contacts/b2PolyContact.js +163 -0
- data/vendor/assets/javascripts/box2d/dynamics/joints/b2DistanceJoint.js +264 -0
- data/vendor/assets/javascripts/box2d/dynamics/joints/b2DistanceJointDef.js +49 -0
- data/vendor/assets/javascripts/box2d/dynamics/joints/b2GearJoint.js +307 -0
- data/vendor/assets/javascripts/box2d/dynamics/joints/b2GearJointDef.js +50 -0
- data/vendor/assets/javascripts/box2d/dynamics/joints/b2Jacobian.js +49 -0
- data/vendor/assets/javascripts/box2d/dynamics/joints/b2Joint.js +200 -0
- data/vendor/assets/javascripts/box2d/dynamics/joints/b2JointDef.js +40 -0
- data/vendor/assets/javascripts/box2d/dynamics/joints/b2JointNode.js +33 -0
- data/vendor/assets/javascripts/box2d/dynamics/joints/b2MouseJoint.js +234 -0
- data/vendor/assets/javascripts/box2d/dynamics/joints/b2MouseJointDef.js +53 -0
- data/vendor/assets/javascripts/box2d/dynamics/joints/b2PrismaticJoint.js +676 -0
- data/vendor/assets/javascripts/box2d/dynamics/joints/b2PrismaticJointDef.js +56 -0
- data/vendor/assets/javascripts/box2d/dynamics/joints/b2PulleyJoint.js +618 -0
- data/vendor/assets/javascripts/box2d/dynamics/joints/b2PulleyJointDef.js +70 -0
- data/vendor/assets/javascripts/box2d/dynamics/joints/b2RevoluteJoint.js +491 -0
- data/vendor/assets/javascripts/box2d/dynamics/joints/b2RevoluteJointDef.js +55 -0
- metadata +133 -0
|
@@ -0,0 +1,469 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2006-2007 Erin Catto http:
|
|
3
|
+
*
|
|
4
|
+
* This software is provided 'as-is', without any express or implied
|
|
5
|
+
* warranty. In no event will the authors be held liable for any damages
|
|
6
|
+
* arising from the use of this software.
|
|
7
|
+
* Permission is granted to anyone to use this software for any purpose,
|
|
8
|
+
* including commercial applications, and to alter it and redistribute it
|
|
9
|
+
* freely, subject to the following restrictions:
|
|
10
|
+
* 1. The origin of this software must not be misrepresented; you must not
|
|
11
|
+
* claim that you wrote the original software. If you use this software
|
|
12
|
+
* in a product, an acknowledgment in the product documentation would be
|
|
13
|
+
* appreciated but is not required.
|
|
14
|
+
* 2. Altered source versions must be plainly marked, and must not be
|
|
15
|
+
* misrepresented the original software.
|
|
16
|
+
* 3. This notice may not be removed or altered from any source distribution.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
// A rigid body. Internal computation are done in terms
|
|
25
|
+
// of the center of mass position. The center of mass may
|
|
26
|
+
// be offset from the body's origin.
|
|
27
|
+
var b2Body = Class.create();
|
|
28
|
+
b2Body.prototype =
|
|
29
|
+
{
|
|
30
|
+
// Set the position of the body's origin and rotation (radians).
|
|
31
|
+
// This breaks any contacts and wakes the other bodies.
|
|
32
|
+
SetOriginPosition: function(position, rotation){
|
|
33
|
+
if (this.IsFrozen())
|
|
34
|
+
{
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
this.m_rotation = rotation;
|
|
39
|
+
this.m_R.Set(this.m_rotation);
|
|
40
|
+
this.m_position = b2Math.AddVV(position , b2Math.b2MulMV(this.m_R, this.m_center));
|
|
41
|
+
|
|
42
|
+
this.m_position0.SetV(this.m_position);
|
|
43
|
+
this.m_rotation0 = this.m_rotation;
|
|
44
|
+
|
|
45
|
+
for (var s = this.m_shapeList; s != null; s = s.m_next)
|
|
46
|
+
{
|
|
47
|
+
s.Synchronize(this.m_position, this.m_R, this.m_position, this.m_R);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
this.m_world.m_broadPhase.Commit();
|
|
51
|
+
},
|
|
52
|
+
|
|
53
|
+
// Get the position of the body's origin. The body's origin does not
|
|
54
|
+
// necessarily coincide with the center of mass. It depends on how the
|
|
55
|
+
// shapes are created.
|
|
56
|
+
GetOriginPosition: function(){
|
|
57
|
+
return b2Math.SubtractVV(this.m_position, b2Math.b2MulMV(this.m_R, this.m_center));
|
|
58
|
+
},
|
|
59
|
+
|
|
60
|
+
// Set the position of the body's center of mass and rotation (radians).
|
|
61
|
+
// This breaks any contacts and wakes the other bodies.
|
|
62
|
+
SetCenterPosition: function(position, rotation){
|
|
63
|
+
if (this.IsFrozen())
|
|
64
|
+
{
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
this.m_rotation = rotation;
|
|
69
|
+
this.m_R.Set(this.m_rotation);
|
|
70
|
+
this.m_position.SetV( position );
|
|
71
|
+
|
|
72
|
+
this.m_position0.SetV(this.m_position);
|
|
73
|
+
this.m_rotation0 = this.m_rotation;
|
|
74
|
+
|
|
75
|
+
for (var s = this.m_shapeList; s != null; s = s.m_next)
|
|
76
|
+
{
|
|
77
|
+
s.Synchronize(this.m_position, this.m_R, this.m_position, this.m_R);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
this.m_world.m_broadPhase.Commit();
|
|
81
|
+
},
|
|
82
|
+
|
|
83
|
+
// Get the position of the body's center of mass. The body's center of mass
|
|
84
|
+
// does not necessarily coincide with the body's origin. It depends on how the
|
|
85
|
+
// shapes are created.
|
|
86
|
+
GetCenterPosition: function(){
|
|
87
|
+
return this.m_position;
|
|
88
|
+
},
|
|
89
|
+
|
|
90
|
+
// Get the rotation in radians.
|
|
91
|
+
GetRotation: function(){
|
|
92
|
+
return this.m_rotation;
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
GetRotationMatrix: function(){
|
|
96
|
+
return this.m_R;
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
// Set/Get the linear velocity of the center of mass.
|
|
100
|
+
SetLinearVelocity: function(v){
|
|
101
|
+
this.m_linearVelocity.SetV(v);
|
|
102
|
+
},
|
|
103
|
+
GetLinearVelocity: function(){
|
|
104
|
+
return this.m_linearVelocity;
|
|
105
|
+
},
|
|
106
|
+
|
|
107
|
+
// Set/Get the angular velocity.
|
|
108
|
+
SetAngularVelocity: function(w){
|
|
109
|
+
this.m_angularVelocity = w;
|
|
110
|
+
},
|
|
111
|
+
GetAngularVelocity: function(){
|
|
112
|
+
return this.m_angularVelocity;
|
|
113
|
+
},
|
|
114
|
+
|
|
115
|
+
// Apply a force at a world point. Additive.
|
|
116
|
+
ApplyForce: function(force, point)
|
|
117
|
+
{
|
|
118
|
+
if (this.IsSleeping() == false)
|
|
119
|
+
{
|
|
120
|
+
this.m_force.Add( force );
|
|
121
|
+
this.m_torque += b2Math.b2CrossVV(b2Math.SubtractVV(point, this.m_position), force);
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
|
|
125
|
+
// Apply a torque. Additive.
|
|
126
|
+
ApplyTorque: function(torque)
|
|
127
|
+
{
|
|
128
|
+
if (this.IsSleeping() == false)
|
|
129
|
+
{
|
|
130
|
+
this.m_torque += torque;
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
|
|
134
|
+
// Apply an impulse at a point. This immediately modifies the velocity.
|
|
135
|
+
ApplyImpulse: function(impulse, point)
|
|
136
|
+
{
|
|
137
|
+
if (this.IsSleeping() == false)
|
|
138
|
+
{
|
|
139
|
+
this.m_linearVelocity.Add( b2Math.MulFV(this.m_invMass, impulse) );
|
|
140
|
+
this.m_angularVelocity += ( this.m_invI * b2Math.b2CrossVV( b2Math.SubtractVV(point, this.m_position), impulse) );
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
|
|
144
|
+
GetMass: function(){
|
|
145
|
+
return this.m_mass;
|
|
146
|
+
},
|
|
147
|
+
|
|
148
|
+
GetInertia: function(){
|
|
149
|
+
return this.m_I;
|
|
150
|
+
},
|
|
151
|
+
|
|
152
|
+
// Get the world coordinates of a point give the local coordinates
|
|
153
|
+
// relative to the body's center of mass.
|
|
154
|
+
GetWorldPoint: function(localPoint){
|
|
155
|
+
return b2Math.AddVV(this.m_position , b2Math.b2MulMV(this.m_R, localPoint));
|
|
156
|
+
},
|
|
157
|
+
|
|
158
|
+
// Get the world coordinates of a vector given the local coordinates.
|
|
159
|
+
GetWorldVector: function(localVector){
|
|
160
|
+
return b2Math.b2MulMV(this.m_R, localVector);
|
|
161
|
+
},
|
|
162
|
+
|
|
163
|
+
// Returns a local point relative to the center of mass given a world point.
|
|
164
|
+
GetLocalPoint: function(worldPoint){
|
|
165
|
+
return b2Math.b2MulTMV(this.m_R, b2Math.SubtractVV(worldPoint, this.m_position));
|
|
166
|
+
},
|
|
167
|
+
|
|
168
|
+
// Returns a local vector given a world vector.
|
|
169
|
+
GetLocalVector: function(worldVector){
|
|
170
|
+
return b2Math.b2MulTMV(this.m_R, worldVector);
|
|
171
|
+
},
|
|
172
|
+
|
|
173
|
+
// Is this body static (immovable)?
|
|
174
|
+
IsStatic: function(){
|
|
175
|
+
return (this.m_flags & b2Body.e_staticFlag) == b2Body.e_staticFlag;
|
|
176
|
+
},
|
|
177
|
+
|
|
178
|
+
IsFrozen: function()
|
|
179
|
+
{
|
|
180
|
+
return (this.m_flags & b2Body.e_frozenFlag) == b2Body.e_frozenFlag;
|
|
181
|
+
},
|
|
182
|
+
|
|
183
|
+
// Is this body sleeping (not simulating).
|
|
184
|
+
IsSleeping: function(){
|
|
185
|
+
return (this.m_flags & b2Body.e_sleepFlag) == b2Body.e_sleepFlag;
|
|
186
|
+
},
|
|
187
|
+
|
|
188
|
+
// You can disable sleeping on this particular body.
|
|
189
|
+
AllowSleeping: function(flag)
|
|
190
|
+
{
|
|
191
|
+
if (flag)
|
|
192
|
+
{
|
|
193
|
+
this.m_flags |= b2Body.e_allowSleepFlag;
|
|
194
|
+
}
|
|
195
|
+
else
|
|
196
|
+
{
|
|
197
|
+
this.m_flags &= ~b2Body.e_allowSleepFlag;
|
|
198
|
+
this.WakeUp();
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
|
|
202
|
+
// Wake up this body so it will begin simulating.
|
|
203
|
+
WakeUp: function(){
|
|
204
|
+
this.m_flags &= ~b2Body.e_sleepFlag;
|
|
205
|
+
this.m_sleepTime = 0.0;
|
|
206
|
+
},
|
|
207
|
+
|
|
208
|
+
// Get the list of all shapes attached to this body.
|
|
209
|
+
GetShapeList: function(){
|
|
210
|
+
return this.m_shapeList;
|
|
211
|
+
},
|
|
212
|
+
|
|
213
|
+
GetContactList: function()
|
|
214
|
+
{
|
|
215
|
+
return this.m_contactList;
|
|
216
|
+
},
|
|
217
|
+
|
|
218
|
+
GetJointList: function()
|
|
219
|
+
{
|
|
220
|
+
return this.m_jointList;
|
|
221
|
+
},
|
|
222
|
+
|
|
223
|
+
// Get the next body in the world's body list.
|
|
224
|
+
GetNext: function(){
|
|
225
|
+
return this.m_next;
|
|
226
|
+
},
|
|
227
|
+
|
|
228
|
+
GetUserData: function(){
|
|
229
|
+
return this.m_userData;
|
|
230
|
+
},
|
|
231
|
+
|
|
232
|
+
//--------------- Internals Below -------------------
|
|
233
|
+
|
|
234
|
+
initialize: function(bd, world){
|
|
235
|
+
// initialize instance variables for references
|
|
236
|
+
this.sMat0 = new b2Mat22();
|
|
237
|
+
this.m_position = new b2Vec2();
|
|
238
|
+
this.m_R = new b2Mat22(0);
|
|
239
|
+
this.m_position0 = new b2Vec2();
|
|
240
|
+
//
|
|
241
|
+
|
|
242
|
+
var i = 0;
|
|
243
|
+
var sd;
|
|
244
|
+
var massData;
|
|
245
|
+
|
|
246
|
+
this.m_flags = 0;
|
|
247
|
+
this.m_position.SetV( bd.position );
|
|
248
|
+
this.m_rotation = bd.rotation;
|
|
249
|
+
this.m_R.Set(this.m_rotation);
|
|
250
|
+
this.m_position0.SetV(this.m_position);
|
|
251
|
+
this.m_rotation0 = this.m_rotation;
|
|
252
|
+
this.m_world = world;
|
|
253
|
+
|
|
254
|
+
this.m_linearDamping = b2Math.b2Clamp(1.0 - bd.linearDamping, 0.0, 1.0);
|
|
255
|
+
this.m_angularDamping = b2Math.b2Clamp(1.0 - bd.angularDamping, 0.0, 1.0);
|
|
256
|
+
|
|
257
|
+
this.m_force = new b2Vec2(0.0, 0.0);
|
|
258
|
+
this.m_torque = 0.0;
|
|
259
|
+
|
|
260
|
+
this.m_mass = 0.0;
|
|
261
|
+
|
|
262
|
+
var massDatas = new Array(b2Settings.b2_maxShapesPerBody);
|
|
263
|
+
for (i = 0; i < b2Settings.b2_maxShapesPerBody; i++){
|
|
264
|
+
massDatas[i] = new b2MassData();
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// Compute the shape mass properties, the bodies total mass and COM.
|
|
268
|
+
this.m_shapeCount = 0;
|
|
269
|
+
this.m_center = new b2Vec2(0.0, 0.0);
|
|
270
|
+
for (i = 0; i < b2Settings.b2_maxShapesPerBody; ++i)
|
|
271
|
+
{
|
|
272
|
+
sd = bd.shapes[i];
|
|
273
|
+
if (sd == null) break;
|
|
274
|
+
massData = massDatas[ i ];
|
|
275
|
+
sd.ComputeMass(massData);
|
|
276
|
+
this.m_mass += massData.mass;
|
|
277
|
+
//this.m_center += massData->mass * (sd->localPosition + massData->center);
|
|
278
|
+
this.m_center.x += massData.mass * (sd.localPosition.x + massData.center.x);
|
|
279
|
+
this.m_center.y += massData.mass * (sd.localPosition.y + massData.center.y);
|
|
280
|
+
++this.m_shapeCount;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// Compute center of mass, and shift the origin to the COM.
|
|
284
|
+
if (this.m_mass > 0.0)
|
|
285
|
+
{
|
|
286
|
+
this.m_center.Multiply( 1.0 / this.m_mass );
|
|
287
|
+
this.m_position.Add( b2Math.b2MulMV(this.m_R, this.m_center) );
|
|
288
|
+
}
|
|
289
|
+
else
|
|
290
|
+
{
|
|
291
|
+
this.m_flags |= b2Body.e_staticFlag;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
// Compute the moment of inertia.
|
|
295
|
+
this.m_I = 0.0;
|
|
296
|
+
for (i = 0; i < this.m_shapeCount; ++i)
|
|
297
|
+
{
|
|
298
|
+
sd = bd.shapes[i];
|
|
299
|
+
massData = massDatas[ i ];
|
|
300
|
+
this.m_I += massData.I;
|
|
301
|
+
var r = b2Math.SubtractVV( b2Math.AddVV(sd.localPosition, massData.center), this.m_center );
|
|
302
|
+
this.m_I += massData.mass * b2Math.b2Dot(r, r);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
if (this.m_mass > 0.0)
|
|
306
|
+
{
|
|
307
|
+
this.m_invMass = 1.0 / this.m_mass;
|
|
308
|
+
}
|
|
309
|
+
else
|
|
310
|
+
{
|
|
311
|
+
this.m_invMass = 0.0;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
if (this.m_I > 0.0 && bd.preventRotation == false)
|
|
315
|
+
{
|
|
316
|
+
this.m_invI = 1.0 / this.m_I;
|
|
317
|
+
}
|
|
318
|
+
else
|
|
319
|
+
{
|
|
320
|
+
this.m_I = 0.0;
|
|
321
|
+
this.m_invI = 0.0;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
// Compute the center of mass velocity.
|
|
325
|
+
this.m_linearVelocity = b2Math.AddVV(bd.linearVelocity, b2Math.b2CrossFV(bd.angularVelocity, this.m_center));
|
|
326
|
+
this.m_angularVelocity = bd.angularVelocity;
|
|
327
|
+
|
|
328
|
+
this.m_jointList = null;
|
|
329
|
+
this.m_contactList = null;
|
|
330
|
+
this.m_prev = null;
|
|
331
|
+
this.m_next = null;
|
|
332
|
+
|
|
333
|
+
// Create the shapes.
|
|
334
|
+
this.m_shapeList = null;
|
|
335
|
+
for (i = 0; i < this.m_shapeCount; ++i)
|
|
336
|
+
{
|
|
337
|
+
sd = bd.shapes[i];
|
|
338
|
+
var shape = b2Shape.Create(sd, this, this.m_center);
|
|
339
|
+
shape.m_next = this.m_shapeList;
|
|
340
|
+
this.m_shapeList = shape;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
this.m_sleepTime = 0.0;
|
|
344
|
+
if (bd.allowSleep)
|
|
345
|
+
{
|
|
346
|
+
this.m_flags |= b2Body.e_allowSleepFlag;
|
|
347
|
+
}
|
|
348
|
+
if (bd.isSleeping)
|
|
349
|
+
{
|
|
350
|
+
this.m_flags |= b2Body.e_sleepFlag;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
if ((this.m_flags & b2Body.e_sleepFlag) || this.m_invMass == 0.0)
|
|
354
|
+
{
|
|
355
|
+
this.m_linearVelocity.Set(0.0, 0.0);
|
|
356
|
+
this.m_angularVelocity = 0.0;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
this.m_userData = bd.userData;
|
|
360
|
+
},
|
|
361
|
+
// does not support destructors
|
|
362
|
+
/*~b2Body(){
|
|
363
|
+
b2Shape* s = this.m_shapeList;
|
|
364
|
+
while (s)
|
|
365
|
+
{
|
|
366
|
+
b2Shape* s0 = s;
|
|
367
|
+
s = s->this.m_next;
|
|
368
|
+
|
|
369
|
+
b2Shape::this.Destroy(s0);
|
|
370
|
+
}
|
|
371
|
+
}*/
|
|
372
|
+
|
|
373
|
+
Destroy: function(){
|
|
374
|
+
var s = this.m_shapeList;
|
|
375
|
+
while (s)
|
|
376
|
+
{
|
|
377
|
+
var s0 = s;
|
|
378
|
+
s = s.m_next;
|
|
379
|
+
|
|
380
|
+
b2Shape.Destroy(s0);
|
|
381
|
+
}
|
|
382
|
+
},
|
|
383
|
+
|
|
384
|
+
// Temp mat
|
|
385
|
+
sMat0: new b2Mat22(),
|
|
386
|
+
SynchronizeShapes: function(){
|
|
387
|
+
//b2Mat22 R0(this.m_rotation0);
|
|
388
|
+
this.sMat0.Set(this.m_rotation0);
|
|
389
|
+
for (var s = this.m_shapeList; s != null; s = s.m_next)
|
|
390
|
+
{
|
|
391
|
+
s.Synchronize(this.m_position0, this.sMat0, this.m_position, this.m_R);
|
|
392
|
+
}
|
|
393
|
+
},
|
|
394
|
+
|
|
395
|
+
QuickSyncShapes: function(){
|
|
396
|
+
for (var s = this.m_shapeList; s != null; s = s.m_next)
|
|
397
|
+
{
|
|
398
|
+
s.QuickSync(this.m_position, this.m_R);
|
|
399
|
+
}
|
|
400
|
+
},
|
|
401
|
+
|
|
402
|
+
// This is used to prevent connected bodies from colliding.
|
|
403
|
+
// It may lie, depending on the collideConnected flag.
|
|
404
|
+
IsConnected: function(other){
|
|
405
|
+
for (var jn = this.m_jointList; jn != null; jn = jn.next)
|
|
406
|
+
{
|
|
407
|
+
if (jn.other == other)
|
|
408
|
+
return jn.joint.m_collideConnected == false;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
return false;
|
|
412
|
+
},
|
|
413
|
+
|
|
414
|
+
Freeze: function(){
|
|
415
|
+
this.m_flags |= b2Body.e_frozenFlag;
|
|
416
|
+
this.m_linearVelocity.SetZero();
|
|
417
|
+
this.m_angularVelocity = 0.0;
|
|
418
|
+
|
|
419
|
+
for (var s = this.m_shapeList; s != null; s = s.m_next)
|
|
420
|
+
{
|
|
421
|
+
s.DestroyProxy();
|
|
422
|
+
}
|
|
423
|
+
},
|
|
424
|
+
|
|
425
|
+
m_flags: 0,
|
|
426
|
+
|
|
427
|
+
m_position: new b2Vec2(),
|
|
428
|
+
m_rotation: null,
|
|
429
|
+
m_R: new b2Mat22(0),
|
|
430
|
+
|
|
431
|
+
// Conservative advancement data.
|
|
432
|
+
m_position0: new b2Vec2(),
|
|
433
|
+
m_rotation0: null,
|
|
434
|
+
|
|
435
|
+
m_linearVelocity: null,
|
|
436
|
+
m_angularVelocity: null,
|
|
437
|
+
|
|
438
|
+
m_force: null,
|
|
439
|
+
m_torque: null,
|
|
440
|
+
|
|
441
|
+
m_center: null,
|
|
442
|
+
|
|
443
|
+
m_world: null,
|
|
444
|
+
m_prev: null,
|
|
445
|
+
m_next: null,
|
|
446
|
+
|
|
447
|
+
m_shapeList: null,
|
|
448
|
+
m_shapeCount: 0,
|
|
449
|
+
|
|
450
|
+
m_jointList: null,
|
|
451
|
+
m_contactList: null,
|
|
452
|
+
|
|
453
|
+
m_mass: null,
|
|
454
|
+
m_invMass: null,
|
|
455
|
+
m_I: null,
|
|
456
|
+
m_invI: null,
|
|
457
|
+
|
|
458
|
+
m_linearDamping: null,
|
|
459
|
+
m_angularDamping: null,
|
|
460
|
+
|
|
461
|
+
m_sleepTime: null,
|
|
462
|
+
|
|
463
|
+
m_userData: null};
|
|
464
|
+
b2Body.e_staticFlag = 0x0001;
|
|
465
|
+
b2Body.e_frozenFlag = 0x0002;
|
|
466
|
+
b2Body.e_islandFlag = 0x0004;
|
|
467
|
+
b2Body.e_sleepFlag = 0x0008;
|
|
468
|
+
b2Body.e_allowSleepFlag = 0x0010;
|
|
469
|
+
b2Body.e_destroyFlag = 0x0020;
|