UNPKG

planck-js

Version:

2D JavaScript/TypeScript physics engine for cross-platform HTML5 game development

70 lines (50 loc) 1.84 kB
import { describe, it, expect } from "vitest"; import { Vec2 } from "../../../common/Vec2"; import { CircleShape } from "../../../collision/shape/CircleShape"; import { BoxShape } from "../../../collision/shape/BoxShape"; import { World } from "../../World"; import { DistanceJoint } from "../DistanceJoint"; describe("DistanceJoint", function(): void { it("calculates local anchors from global", function(): void { var world = new World(); var circle = new CircleShape(1); var box = new BoxShape(1, 1); var b1 = world.createBody({ position : new Vec2(0, 0), type : "dynamic" }); b1.createFixture(circle); var b2 = world.createBody({ position : new Vec2(10, 0), type : "dynamic" }); b2.createFixture(box); var joint = new DistanceJoint({}, b1, b2, new Vec2(1, 0), new Vec2(9, -1)); world.createJoint(joint); expect(joint.getLocalAnchorA()).deep.equal(new Vec2(1, 0)); expect(joint.getLocalAnchorB()).deep.equal(new Vec2(-1, -1)); expect(joint.getAnchorA()).deep.equal(new Vec2(1, 0)); expect(joint.getAnchorB()).deep.equal(new Vec2(9, -1)); }); it("moves attached body", function(): void { var world = new World(); var circle = new CircleShape(1); var box = new BoxShape(1, 1); var b1 = world.createBody({ position : new Vec2(0, 0), type : "dynamic" }); b1.createFixture(circle); var b2 = world.createBody({ position : new Vec2(10, 0), type : "dynamic" }); b2.createFixture(box); var joint = new DistanceJoint({}, b1, b2, new Vec2(1, 0), new Vec2(9, -1)); world.createJoint(joint); b2.applyForceToCenter(new Vec2(500, 0), true); world.step(1 / 10); expect(b1.getPosition().x).closeTo(2, 1e-1); expect(b2.getPosition().x).closeTo(12, 1e-1); }); });