silphius/app/ecs/systems/integrate-physics.js
2024-09-05 16:48:57 -05:00

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);
}
}