31 lines
665 B
JavaScript
31 lines
665 B
JavaScript
import {System} from '@/ecs/index.js';
|
|
|
|
export default class IntegratePhysics extends System {
|
|
|
|
predict(entity, elapsed) {
|
|
this.tickSingle(entity, elapsed);
|
|
}
|
|
|
|
static queries() {
|
|
return {
|
|
default: ['Position', 'Forces'],
|
|
};
|
|
}
|
|
|
|
tick(elapsed) {
|
|
for (const entity of this.select('default')) {
|
|
this.tickSingle(entity, elapsed);
|
|
}
|
|
}
|
|
|
|
tickSingle(entity, elapsed) {
|
|
const {Forces, Position} = entity;
|
|
if (!Forces || !Position) {
|
|
return;
|
|
}
|
|
Position.x = Position.$$x + elapsed * (Forces.$$impulseX + Forces.$$forceX);
|
|
Position.y = Position.$$y + elapsed * (Forces.$$impulseY + Forces.$$forceY);
|
|
}
|
|
|
|
}
|