35 lines
626 B
JavaScript
35 lines
626 B
JavaScript
|
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) {}
|