planck-js
Version:
2D JavaScript/TypeScript physics engine for cross-platform HTML5 game development
72 lines (53 loc) • 1.49 kB
text/typescript
/*
* Copyright (c) Erin Catto
* Licensed under the MIT license
*/
import { World, Vec2, PolygonShape, Testbed, Vec2Value } from "planck";
const world = new World();
const testbed = Testbed.mount();
testbed.x = 0;
testbed.y = 0;
testbed.start(world);
testbed.info("X: Generate a new random convex hull, Z: Auto-generate");
const COUNT = 8;
let auto = false;
const points: Vec2Value[] = [];
let shape: PolygonShape;
generate();
function generate() {
const lowerBound = { x: -8.0, y: -8.0 };
const upperBound = { x: 8.0, y: 8.0 };
points.length = 0;
for (let i = 0; i < COUNT; ++i) {
const x = 10.0 * Math.random() - 5;
const y = 10.0 * Math.random() - 5;
// Clamp onto a square to help create collinearities.
// This will stress the convex hull algorithm.
const v = Vec2.clampVec2({ x: x, y: y }, lowerBound, upperBound);
points.push(v);
}
shape = new PolygonShape(points);
}
testbed.keydown = function (code, char) {
switch (char) {
case "Z":
auto = !auto;
break;
case "X":
generate();
break;
}
};
testbed.step = function () {
testbed.drawPolygon(shape.m_vertices, testbed.color(0.9, 0.9, 0.9));
for (let i = 0; i < points.length; ++i) {
testbed.drawPoint(points[i], 3.0, testbed.color(0.3, 0.9, 0.3));
// testbed.drawString(points[i] + ({ x: 0.05, y: 0.05 }), "%d", i);
}
// if (shape.validate() == false) {
// m_textLine += 0;
// }
if (auto) {
generate();
}
};