2019-03-24 03:24:35 -05:00
|
|
|
import {Engine, World as MatterWorld} from 'matter-js';
|
|
|
|
|
|
|
|
import {Body} from './body';
|
|
|
|
import {AbstractWorld} from '../abstract/world';
|
|
|
|
|
|
|
|
export class World extends AbstractWorld {
|
|
|
|
|
|
|
|
constructor() {
|
|
|
|
super();
|
|
|
|
const world = MatterWorld.create({
|
|
|
|
gravity: {
|
|
|
|
x: 0,
|
|
|
|
y: 0,
|
|
|
|
scale: 0,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
this.engine = Engine.create({
|
|
|
|
world,
|
|
|
|
});
|
|
|
|
this.lastElapsed = undefined;
|
|
|
|
}
|
|
|
|
|
|
|
|
addBody(body) {
|
|
|
|
MatterWorld.add(this.engine.world, body.matterBody);
|
|
|
|
}
|
|
|
|
|
|
|
|
createBody(shape) {
|
|
|
|
return new Body(shape);
|
|
|
|
}
|
|
|
|
|
|
|
|
removeBody(body) {
|
|
|
|
super.removeBody(body);
|
2019-03-24 18:30:22 -05:00
|
|
|
MatterWorld.remove(this.engine.world, body.matterBody);
|
2019-03-24 03:24:35 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
tick(elapsed) {
|
|
|
|
// Milliseconds.
|
|
|
|
elapsed = elapsed * 1000;
|
|
|
|
const correction = this.lastElapsed ? elapsed / this.lastElapsed : 1;
|
|
|
|
// Update simulation.
|
|
|
|
Engine.update(this.engine, elapsed, correction)
|
|
|
|
this.lastElapsed = elapsed;
|
|
|
|
// Propagate.
|
|
|
|
super.tick(elapsed);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|