import {compose, virtualize} from '@avocado/core'; const decorate = compose( virtualize([ 'addBody', 'createBody', ]), ); class AbstractWorldBase { constructor() { this.entities = new Map(); } associateBodyWithEntity(body, entity) { this.entities.set(body, entity); body.position = entity.position; } removeBody(body) { this.entities.delete(body); } tick(elapsed) { // Propagate position updates. for (const entity of this.entities.values()) { entity.position = entity.body.position; } } } export class AbstractWorld extends decorate(AbstractWorldBase) {}