From bea551fa19c1108afe19a9f4f25681af76c22841 Mon Sep 17 00:00:00 2001 From: cha0s Date: Thu, 17 Oct 2024 23:13:53 -0500 Subject: [PATCH] refactor: forces --- app/ecs/components/forces.js | 12 ++++++++++++ app/ecs/systems/integrate-physics.js | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/ecs/components/forces.js b/app/ecs/components/forces.js index 0265411..60a5688 100644 --- a/app/ecs/components/forces.js +++ b/app/ecs/components/forces.js @@ -4,6 +4,16 @@ export default class Forces extends Component { instanceFromSchema() { const {ecs} = this; 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}) { this.$$impulseX += x; this.$$impulseY += y; @@ -17,6 +27,8 @@ export default class Forces extends Component { } } static properties = { + forceX: {type: 'float32'}, + forceY: {type: 'float32'}, impulseX: {type: 'float32'}, impulseY: {type: 'float32'}, }; diff --git a/app/ecs/systems/integrate-physics.js b/app/ecs/systems/integrate-physics.js index 494a07f..e5e1ad1 100644 --- a/app/ecs/systems/integrate-physics.js +++ b/app/ecs/systems/integrate-physics.js @@ -24,9 +24,9 @@ export default class IntegratePhysics extends System { return; } Position.lastX = Position.$$x; - Position.$$x += elapsed * (Forces.$$impulseX); + Position.$$x += elapsed * (Forces.$$impulseX + Forces.$$forceX); Position.lastY = Position.$$y; - Position.$$y += elapsed * (Forces.$$impulseY); + Position.$$y += elapsed * (Forces.$$impulseY + Forces.$$forceY); this.ecs.markChange( entity.id, { Position: {