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); MatterWorld.remove(this.engine.world, body.matterBody); } 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); } }