summaryrefslogtreecommitdiffstats
path: root/o3d/samples/box2d-3d/demos/crank.js
diff options
context:
space:
mode:
Diffstat (limited to 'o3d/samples/box2d-3d/demos/crank.js')
-rw-r--r--o3d/samples/box2d-3d/demos/crank.js79
1 files changed, 79 insertions, 0 deletions
diff --git a/o3d/samples/box2d-3d/demos/crank.js b/o3d/samples/box2d-3d/demos/crank.js
new file mode 100644
index 0000000..007c1dc
--- /dev/null
+++ b/o3d/samples/box2d-3d/demos/crank.js
@@ -0,0 +1,79 @@
+// This file comes from Box2D-JS, Copyright (c) 2008 ANDO Yasushi.
+// The original version is available at http://box2d-js.sourceforge.net/ under the
+// zlib/libpng license (see License.txt).
+// This version has been modified to make it work with O3D.
+
+demos.crank = {};
+demos.crank.initWorld = function(world) {
+ var ground = world.m_groundBody;
+
+ // Define crank.
+ var sd = new b2BoxDef();
+ sd.extents.Set(5, 25);
+ sd.density = 1.0;
+
+ var bd = new b2BodyDef();
+ bd.userData = g.mgr.createBox(5, 25);
+ bd.AddShape(sd);
+
+ var rjd = new b2RevoluteJointDef();
+
+ var prevBody = ground;
+
+ bd.position.Set(500/2, 210);
+ bd.userData = g.mgr.createBox(5, 25);
+ var body = world.CreateBody(bd);
+
+ rjd.anchorPoint.Set(500/2, 235);
+ rjd.body1 = prevBody;
+ rjd.body2 = body;
+ rjd.motorSpeed = -1.0 * Math.PI;
+ rjd.motorTorque = 500000000.0;
+ rjd.enableMotor = true;
+ world.CreateJoint(rjd);
+
+ prevBody = body;
+
+ // Define follower.
+ sd.extents.Set(5, 45);
+ bd.position.Set(500/2, 140);
+ bd.userData = g.mgr.createBox(5, 45);
+ body = world.CreateBody(bd);
+
+ rjd.anchorPoint.Set(500/2, 185);
+ rjd.body1 = prevBody;
+ rjd.body2 = body;
+ rjd.enableMotor = false;
+ world.CreateJoint(rjd);
+
+ prevBody = body;
+
+ // Define piston
+ sd.extents.Set(20, 20);
+ bd.position.Set(500/2, 95);
+ bd.userData = g.mgr.createBox(20, 20);
+ body = world.CreateBody(bd);
+
+ rjd.anchorPoint.Set(500/2, 95);
+ rjd.body1 = prevBody;
+ rjd.body2 = body;
+ world.CreateJoint(rjd);
+
+ var pjd = new b2PrismaticJointDef();
+ pjd.anchorPoint.Set(500/2, 95);
+ pjd.body1 = ground;
+ pjd.body2 = body;
+ pjd.axis.Set(0.0, 1.0);
+ pjd.motorSpeed = 0.0; // joint friction
+ pjd.motorForce = 100000.0;
+ pjd.enableMotor = true;
+
+ world.CreateJoint(pjd);
+
+ // Create a payload
+ sd.density = 2.0;
+ bd.position.Set(500/2, 10);
+ bd.userData = g.mgr.createBox(20, 20);
+ world.CreateBody(bd);
+}
+demos.InitWorlds.push(demos.crank.initWorld);