avocado-old/packages/physics/abstract/world.js

39 lines
761 B
JavaScript
Raw Normal View History

2019-03-24 01:16:24 -05:00
import {compose, virtualize} from '@avocado/core';
import {Vector} from '@avocado/math';
2019-03-24 01:16:24 -05:00
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()) {
if (Vector.equalsClose(entity.position, entity.body.position)) {
continue;
}
2019-03-24 01:16:24 -05:00
entity.position = entity.body.position;
}
}
}
export class AbstractWorld extends decorate(AbstractWorldBase) {}