matter-attractors-f
Version:
Unofficial updated version of matter-attractors (https://www.npmjs.com/package/matter-attractors)
80 lines (64 loc) • 2.28 kB
JavaScript
;
const Matter = require('matter-js');
const MatterAttractors = require('../index.js');
const expect = require('chai').expect;
Matter.use(MatterAttractors);
describe(MatterAttractors.name, function() {
it('has been installed', function() {
expect(Matter.used).to.include(MatterAttractors.name);
});
it('has been registered', function() {
expect(MatterAttractors.name in Matter.Plugin._registry).to.be.true;
});
it('adds attractors property to body', function() {
let attractorBody = Matter.Bodies.circle(0, 0, 10);
expect(attractorBody.plugin.attractors).to.exist;
});
it('applies attractor forces on engine update', function() {
let attractorBody = Matter.Bodies.circle(0, 0, 10, {
plugin: {
attractors: [
function(bodyA, bodyB) {
expect(bodyA.id).to.equal(attractorBody.id);
expect(bodyB.id).to.equal(attractedBody.id);
return {
x: 1,
y: 1
};
},
function(bodyA, bodyB) {
expect(bodyA.id).to.equal(attractorBody.id);
expect(bodyB.id).to.equal(attractedBody.id);
return {
x: 2,
y: 2
};
}
]
}
});
let attractedBody = Matter.Bodies.circle(0, 0, 10),
engine = Matter.Engine.create();
engine.world.gravity.scale = 0;
Matter.World.add(engine.world, [attractorBody, attractedBody]);
Matter.Engine.update(engine);
expect(attractedBody.velocity.x).to.be.above(0);
expect(attractedBody.velocity.y).to.be.above(0);
});
it('applies gravity attractor correctly', function() {
let attractorBody = Matter.Bodies.circle(0, 0, 10, {
plugin: {
attractors: [
MatterAttractors.Attractors.gravity
]
}
});
let attractedBody = Matter.Bodies.circle(-20, -20, 10),
engine = Matter.Engine.create();
engine.world.gravity.scale = 0;
Matter.World.add(engine.world, [attractorBody, attractedBody]);
Matter.Engine.update(engine);
expect(attractedBody.velocity.x).to.be.above(0);
expect(attractedBody.velocity.y).to.be.above(0);
});
});