p5js/lib/box2d-js/demos/crank.js
2022-12-25 19:50:01 +08:00

70 lines
1.5 KiB
JavaScript

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.AddShape(sd);
var rjd = new b2RevoluteJointDef();
var prevBody = ground;
bd.position.Set(500/2, 210);
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);
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);
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);
world.CreateBody(bd);
}
demos.InitWorlds.push(demos.crank.initWorld);