refactor: forces

This commit is contained in:
cha0s 2024-10-17 23:13:53 -05:00
parent 68b908ec43
commit bea551fa19
2 changed files with 14 additions and 2 deletions

View File

@ -4,6 +4,16 @@ export default class Forces extends Component {
instanceFromSchema() { instanceFromSchema() {
const {ecs} = this; const {ecs} = this;
return class ForcesInstance extends super.instanceFromSchema() { return class ForcesInstance extends super.instanceFromSchema() {
applyForce({x, y}) {
this.$$forceX += x;
this.$$forceY += y;
ecs.markChange(this.entity, {
Forces: {
forceX: this.$$forceX,
forceY: this.$$forceY,
},
});
}
applyImpulse({x, y}) { applyImpulse({x, y}) {
this.$$impulseX += x; this.$$impulseX += x;
this.$$impulseY += y; this.$$impulseY += y;
@ -17,6 +27,8 @@ export default class Forces extends Component {
} }
} }
static properties = { static properties = {
forceX: {type: 'float32'},
forceY: {type: 'float32'},
impulseX: {type: 'float32'}, impulseX: {type: 'float32'},
impulseY: {type: 'float32'}, impulseY: {type: 'float32'},
}; };

View File

@ -24,9 +24,9 @@ export default class IntegratePhysics extends System {
return; return;
} }
Position.lastX = Position.$$x; Position.lastX = Position.$$x;
Position.$$x += elapsed * (Forces.$$impulseX); Position.$$x += elapsed * (Forces.$$impulseX + Forces.$$forceX);
Position.lastY = Position.$$y; Position.lastY = Position.$$y;
Position.$$y += elapsed * (Forces.$$impulseY); Position.$$y += elapsed * (Forces.$$impulseY + Forces.$$forceY);
this.ecs.markChange( this.ecs.markChange(
entity.id, { entity.id, {
Position: { Position: {