Skip to content

Instantly share code, notes, and snippets.

@vgel
Created July 12, 2017 01:30
Show Gist options
  • Save vgel/6629037a705873019c4ee846fa06433e to your computer and use it in GitHub Desktop.
Save vgel/6629037a705873019c4ee846fa06433e to your computer and use it in GitHub Desktop.
JS Bin // source http://jsbin.com/qizogoy
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pixi.js/4.5.3/pixi.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/planck-js/0.1.34/planck-with-testbed.js"></script>
</head>
<body>
<script id="jsbin-javascript">
'use strict';
planck.testbed('Apply Force', function (testbed) {
testbed.y = -20;
//testbed.background = '#ff0000';
var pl = planck,
Vec2 = pl.Vec2,
Transform = pl.Transform;
var world = new pl.World();
world.setGravity(Vec2(0.0, -50));
var ground = world.createBody(Vec2(0.0, 20.0));
var wallFD = {};
wallFD.density = 0.0;
wallFD.restitution = 0.4;
// Left vertical
ground.createFixture(pl.Edge(Vec2(-20.0, -20.0), Vec2(-20.0, 20.0)), wallFD);
// Right vertical
ground.createFixture(pl.Edge(Vec2(20.0, -20.0), Vec2(20.0, 20.0)), wallFD);
// Top horizontal
ground.createFixture(pl.Edge(Vec2(-20.0, 20.0), Vec2(20.0, 20.0)), wallFD);
// Bottom horizontal
ground.createFixture(pl.Edge(Vec2(-20.0, -20.0), Vec2(20.0, -20.0)), wallFD);
var xf1 = new Transform();
xf1.q.set(0.3524 * Math.PI);
xf1.p.set(xf1.q.getXAxis());
var poly1 = pl.Polygon(Transform.mul(xf1, [Vec2(-1.0, 0.0), Vec2(1.0, 0.0), Vec2(0.0, 0.5)]));
var xf2 = new Transform();
xf2.q.set(-0.3524 * Math.PI);
xf2.p.set(Vec2.neg(xf2.q.getXAxis()));
var poly2 = pl.Polygon(Transform.mul(xf2, [Vec2(-1.0, 0.0), Vec2(1.0, 0.0), Vec2(0.0, 0.5)]));
var drone = world.createBody({
type: 'dynamic',
angularDamping: 2.0,
linearDamping: 0.5,
position: Vec2(0.0, 2.0),
//angle : Math.PI,
allowSleep: false
});
drone.createFixture(pl.Box(4, 0.5), 2.0);
// var boxFD = {};
// boxFD.density = 1.0;
// boxFD.friction = 0.3;
// for (var i = 0; i < 10; ++i) {
// var box = world.createBody({
// type : 'dynamic',
// position : Vec2(-10 + i * 2, 35)
// });
// box.createFixture(pl.Box(0.5, 0.5), boxFD);
// var gravity = 10.0;
// var I = box.getInertia();
// var mass = box.getMass();
// // For a circle: I = 0.5 * m * r * r ==> r = sqrt(2 * I / m)
// var radius = Math.sqrt(2.0 * I / mass);
// world.createJoint(pl.FrictionJoint({
// collideConnected : true,
// maxForce : mass * gravity,
// maxTorque : mass * radius * gravity
// }, ground, box));
// }
testbed.step = function () {
//jet.applyAngularImpulse(+0.2, true);
if (testbed.activeKeys.left) {
//testbed.background = '#dddddd';
console.log('l');
drone.applyLinearImpulse(drone.getWorldVector(Vec2(0.0, 15)), drone.getWorldPoint(Vec2(-1.5, 0)), true);
}
if (testbed.activeKeys.right) {
//testbed.background = '#dddddd';
console.log('r');
drone.applyLinearImpulse(drone.getWorldVector(Vec2(0.0, 15)), drone.getWorldPoint(Vec2(1.5, 0)), true);
}
};
return world;
});
</script>
<script id="jsbin-source-javascript" type="text/javascript">'use strict';
planck.testbed('Apply Force', function(testbed) {
testbed.y = -20;
//testbed.background = '#ff0000';
var pl = planck, Vec2 = pl.Vec2, Transform = pl.Transform;
var world = new pl.World();
world.setGravity(Vec2(0.0, -50));
var ground = world.createBody(Vec2(0.0, 20.0));
var wallFD = {};
wallFD.density = 0.0;
wallFD.restitution = 0.4;
// Left vertical
ground.createFixture(pl.Edge(Vec2(-20.0, -20.0), Vec2(-20.0, 20.0)), wallFD);
// Right vertical
ground.createFixture(pl.Edge(Vec2(20.0, -20.0), Vec2(20.0, 20.0)), wallFD);
// Top horizontal
ground.createFixture(pl.Edge(Vec2(-20.0, 20.0), Vec2(20.0, 20.0)), wallFD);
// Bottom horizontal
ground.createFixture(pl.Edge(Vec2(-20.0, -20.0), Vec2(20.0, -20.0)), wallFD);
var xf1 = new Transform();
xf1.q.set(0.3524 * Math.PI);
xf1.p.set(xf1.q.getXAxis());
var poly1 = pl.Polygon(Transform.mul(xf1, [Vec2(-1.0, 0.0), Vec2(1.0, 0.0), Vec2(0.0, 0.5)]));
var xf2 = new Transform();
xf2.q.set(-0.3524 * Math.PI);
xf2.p.set(Vec2.neg(xf2.q.getXAxis()));
var poly2 = pl.Polygon(Transform.mul(xf2, [Vec2(-1.0, 0.0), Vec2(1.0, 0.0), Vec2(0.0, 0.5)]));
var drone = world.createBody({
type : 'dynamic',
angularDamping : 2.0,
linearDamping : 0.5,
position : Vec2(0.0, 2.0),
//angle : Math.PI,
allowSleep : false
});
drone.createFixture(pl.Box(4, 0.5), 2.0);
// var boxFD = {};
// boxFD.density = 1.0;
// boxFD.friction = 0.3;
// for (var i = 0; i < 10; ++i) {
// var box = world.createBody({
// type : 'dynamic',
// position : Vec2(-10 + i * 2, 35)
// });
// box.createFixture(pl.Box(0.5, 0.5), boxFD);
// var gravity = 10.0;
// var I = box.getInertia();
// var mass = box.getMass();
// // For a circle: I = 0.5 * m * r * r ==> r = sqrt(2 * I / m)
// var radius = Math.sqrt(2.0 * I / mass);
// world.createJoint(pl.FrictionJoint({
// collideConnected : true,
// maxForce : mass * gravity,
// maxTorque : mass * radius * gravity
// }, ground, box));
// }
testbed.step = () => {
//jet.applyAngularImpulse(+0.2, true);
if (testbed.activeKeys.left) {
//testbed.background = '#dddddd';
console.log('l');
drone.applyLinearImpulse(
drone.getWorldVector(Vec2(0.0, 15)),
drone.getWorldPoint(Vec2(-1.5, 0)),
true
);
}
if (testbed.activeKeys.right) {
//testbed.background = '#dddddd';
console.log('r');
drone.applyLinearImpulse(
drone.getWorldVector(Vec2(0.0, 15)),
drone.getWorldPoint(Vec2(1.5, 0)),
true
);
}
};
return world;
});</script></body>
</html>
'use strict';
planck.testbed('Apply Force', function (testbed) {
testbed.y = -20;
//testbed.background = '#ff0000';
var pl = planck,
Vec2 = pl.Vec2,
Transform = pl.Transform;
var world = new pl.World();
world.setGravity(Vec2(0.0, -50));
var ground = world.createBody(Vec2(0.0, 20.0));
var wallFD = {};
wallFD.density = 0.0;
wallFD.restitution = 0.4;
// Left vertical
ground.createFixture(pl.Edge(Vec2(-20.0, -20.0), Vec2(-20.0, 20.0)), wallFD);
// Right vertical
ground.createFixture(pl.Edge(Vec2(20.0, -20.0), Vec2(20.0, 20.0)), wallFD);
// Top horizontal
ground.createFixture(pl.Edge(Vec2(-20.0, 20.0), Vec2(20.0, 20.0)), wallFD);
// Bottom horizontal
ground.createFixture(pl.Edge(Vec2(-20.0, -20.0), Vec2(20.0, -20.0)), wallFD);
var xf1 = new Transform();
xf1.q.set(0.3524 * Math.PI);
xf1.p.set(xf1.q.getXAxis());
var poly1 = pl.Polygon(Transform.mul(xf1, [Vec2(-1.0, 0.0), Vec2(1.0, 0.0), Vec2(0.0, 0.5)]));
var xf2 = new Transform();
xf2.q.set(-0.3524 * Math.PI);
xf2.p.set(Vec2.neg(xf2.q.getXAxis()));
var poly2 = pl.Polygon(Transform.mul(xf2, [Vec2(-1.0, 0.0), Vec2(1.0, 0.0), Vec2(0.0, 0.5)]));
var drone = world.createBody({
type: 'dynamic',
angularDamping: 2.0,
linearDamping: 0.5,
position: Vec2(0.0, 2.0),
//angle : Math.PI,
allowSleep: false
});
drone.createFixture(pl.Box(4, 0.5), 2.0);
// var boxFD = {};
// boxFD.density = 1.0;
// boxFD.friction = 0.3;
// for (var i = 0; i < 10; ++i) {
// var box = world.createBody({
// type : 'dynamic',
// position : Vec2(-10 + i * 2, 35)
// });
// box.createFixture(pl.Box(0.5, 0.5), boxFD);
// var gravity = 10.0;
// var I = box.getInertia();
// var mass = box.getMass();
// // For a circle: I = 0.5 * m * r * r ==> r = sqrt(2 * I / m)
// var radius = Math.sqrt(2.0 * I / mass);
// world.createJoint(pl.FrictionJoint({
// collideConnected : true,
// maxForce : mass * gravity,
// maxTorque : mass * radius * gravity
// }, ground, box));
// }
testbed.step = function () {
//jet.applyAngularImpulse(+0.2, true);
if (testbed.activeKeys.left) {
//testbed.background = '#dddddd';
console.log('l');
drone.applyLinearImpulse(drone.getWorldVector(Vec2(0.0, 15)), drone.getWorldPoint(Vec2(-1.5, 0)), true);
}
if (testbed.activeKeys.right) {
//testbed.background = '#dddddd';
console.log('r');
drone.applyLinearImpulse(drone.getWorldVector(Vec2(0.0, 15)), drone.getWorldPoint(Vec2(1.5, 0)), true);
}
};
return world;
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment