avocado-old/packages/physics/abstract/world.js
2019-04-16 14:04:30 -05:00

51 lines
1.1 KiB
JavaScript

import {compose, virtualize} from '@avocado/core';
import {Vector} from '@avocado/math';
const decorate = compose(
virtualize([
'addBody',
'createBody',
]),
);
export class AbstractWorld extends decorate(class {}) {
constructor() {
super();
this.entities = new Map();
this.entitiesList = [];
}
associateBodyWithEntity(body, entity) {
this.entities.set(body, entity);
this.entitiesList.push(entity);
body.position = entity.position;
}
removeBody(body) {
if (this.entities.has(body)) {
const entity = this.entities.get(body);
this.entities.delete(body);
const index = this.entitiesList.indexOf(entity);
if (-1 !== index) {
this.entitiesList.splice(index, 1);
}
}
}
tick(elapsed) {
// Propagate position updates.
for (let i = 0; i < this.entitiesList.length; ++i) {
const entity = this.entitiesList[i];
const [entityX, entityY] = entity.position;
const [bodyX, bodyY] = entity.body.position;
// Hot.
if (entityX === bodyX && entityY === bodyY) {
continue;
}
entity.position = entity.body.position;
}
}
}