From 2dc3120831fbcd03b635bbad59213ff0bf1f8879 Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Sun, 13 Aug 2023 17:09:12 -0600 Subject: [PATCH] refactor velocity a bit for no real reason besides verbosity --- engine/components/Control.ts | 6 +++--- engine/components/Velocity.ts | 18 +++++++++--------- engine/entities/Player.ts | 4 +++- engine/interfaces/Vec2.ts | 7 +++++-- engine/systems/Collision.ts | 8 +++++--- engine/systems/FacingDirection.ts | 15 +++++++++------ engine/systems/Input.ts | 12 ++++++++---- engine/systems/Physics.ts | 22 +++++++++++++--------- 8 files changed, 55 insertions(+), 37 deletions(-) diff --git a/engine/components/Control.ts b/engine/components/Control.ts index 1e782ee..fb7b916 100644 --- a/engine/components/Control.ts +++ b/engine/components/Control.ts @@ -1,11 +1,11 @@ import { Component, ComponentNames, Velocity } from "."; export class Control extends Component { - public controlVelocity: Velocity; + public controlVelocityComponent: Velocity; - constructor(controlVelocity: Velocity = new Velocity()) { + constructor(controlVelocityComponent: Velocity = new Velocity()) { super(ComponentNames.Control); - this.controlVelocity = controlVelocity; + this.controlVelocityComponent = controlVelocityComponent; } } diff --git a/engine/components/Velocity.ts b/engine/components/Velocity.ts index 068d8cd..aec0c03 100644 --- a/engine/components/Velocity.ts +++ b/engine/components/Velocity.ts @@ -3,21 +3,21 @@ import { Component } from "./Component"; import { ComponentNames } from "."; export class Velocity extends Component { - public dCartesian: Velocity2D; - public dTheta: number; + public velocity: Velocity2D; - constructor(dCartesian: Velocity2D = { dx: 0, dy: 0 }, dTheta: number = 0) { + constructor( + velocity: Velocity2D = { dCartesian: { dx: 0, dy: 0 }, dTheta: 0 }, + ) { super(ComponentNames.Velocity); - this.dCartesian = dCartesian; - this.dTheta = dTheta; + this.velocity = velocity; } - public add(velocity?: Velocity) { + public add(velocity?: Velocity2D) { if (velocity) { - this.dCartesian.dx += velocity.dCartesian.dx; - this.dCartesian.dy += velocity.dCartesian.dy; - this.dTheta += velocity.dTheta; + this.velocity.dCartesian.dx += velocity.dCartesian.dx; + this.velocity.dCartesian.dy += velocity.dCartesian.dy; + this.velocity.dTheta += velocity.dTheta; } } } diff --git a/engine/entities/Player.ts b/engine/entities/Player.ts index 45d7500..eeddd69 100644 --- a/engine/entities/Player.ts +++ b/engine/entities/Player.ts @@ -35,7 +35,9 @@ export class Player extends Entity { ), ); - this.addComponent(new Velocity({ dx: 0, dy: 0 }, 0)); + this.addComponent( + new Velocity({ dCartesian: { dx: 0, dy: 0 }, dTheta: 0 }), + ); this.addComponent(new Mass(Player.MASS)); this.addComponent(new Moment(Player.MOI)); diff --git a/engine/interfaces/Vec2.ts b/engine/interfaces/Vec2.ts index b2bae37..04be4be 100644 --- a/engine/interfaces/Vec2.ts +++ b/engine/interfaces/Vec2.ts @@ -9,8 +9,11 @@ export interface Dimension2D { } export interface Velocity2D { - dx: number; - dy: number; + dCartesian: { + dx: number; + dy: number; + }; + dTheta: number; } export interface Force2D { diff --git a/engine/systems/Collision.ts b/engine/systems/Collision.ts index 1366ef4..889f85e 100644 --- a/engine/systems/Collision.ts +++ b/engine/systems/Collision.ts @@ -10,7 +10,7 @@ import { import { Game } from "../Game"; import { PhysicsConstants } from "../config"; import { Entity } from "../entities"; -import type { Dimension2D } from "../interfaces"; +import type { Dimension2D, Velocity2D } from "../interfaces"; import { QuadTree } from "../structures"; export class Collision extends System { @@ -91,9 +91,11 @@ export class Collision extends System { (entity) => entity.getComponent(ComponentNames.BoundingBox), ); - let velocity = new Velocity(); + let velocity: Velocity2D = { dCartesian: { dx: 0, dy: 0 }, dTheta: 0 }; if (entityA.hasComponent(ComponentNames.Velocity)) { - velocity = entityA.getComponent(ComponentNames.Velocity); + velocity = entityA.getComponent( + ComponentNames.Velocity, + ).velocity; } if ( diff --git a/engine/systems/FacingDirection.ts b/engine/systems/FacingDirection.ts index 4426ab6..daf639f 100644 --- a/engine/systems/FacingDirection.ts +++ b/engine/systems/FacingDirection.ts @@ -20,21 +20,24 @@ export class FacingDirection extends System { return; } - const totalVelocity: Velocity = new Velocity(); + const totalVelocityComponent = new Velocity(); const control = entity.getComponent(ComponentNames.Control); - const velocity = entity.getComponent(ComponentNames.Velocity); - totalVelocity.add(velocity); + const velocity = entity.getComponent( + ComponentNames.Velocity, + ).velocity; + + totalVelocityComponent.add(velocity); if (control) { - totalVelocity.add(control.controlVelocity); + totalVelocityComponent.add(control.controlVelocityComponent.velocity); } const facingDirection = entity.getComponent( ComponentNames.FacingDirection, ); - if (totalVelocity.dCartesian.dx > 0) { + if (totalVelocityComponent.velocity.dCartesian.dx > 0) { entity.addComponent(facingDirection.facingRightSprite); - } else if (totalVelocity.dCartesian.dx < 0) { + } else if (totalVelocityComponent.velocity.dCartesian.dx < 0) { entity.addComponent(facingDirection.facingLeftSprite); } }, diff --git a/engine/systems/Input.ts b/engine/systems/Input.ts index 35d2e1d..d9b7133 100644 --- a/engine/systems/Input.ts +++ b/engine/systems/Input.ts @@ -39,20 +39,24 @@ export class Input extends System { public update(_dt: number, game: Game) { game.forEachEntityWithComponent(ComponentNames.Control, (entity) => { - const control = entity.getComponent(ComponentNames.Control); + const controlComponent = entity.getComponent( + ComponentNames.Control, + ); if (this.hasSomeKey(KeyConstants.ActionKeys.get(Action.MOVE_RIGHT))) { - control.controlVelocity.dCartesian.dx += + controlComponent.controlVelocityComponent.velocity.dCartesian.dx += PhysicsConstants.PLAYER_MOVE_VEL; } if (this.hasSomeKey(KeyConstants.ActionKeys.get(Action.MOVE_LEFT))) { - control.controlVelocity.dCartesian.dx += + controlComponent.controlVelocityComponent.velocity.dCartesian.dx += -PhysicsConstants.PLAYER_MOVE_VEL; } if (entity.hasComponent(ComponentNames.Jump)) { - const velocity = entity.getComponent(ComponentNames.Velocity); + const velocity = entity.getComponent( + ComponentNames.Velocity, + ).velocity; const jump = entity.getComponent(ComponentNames.Jump); if (this.hasSomeKey(KeyConstants.ActionKeys.get(Action.JUMP))) { diff --git a/engine/systems/Physics.ts b/engine/systems/Physics.ts index 38962a6..e324c97 100644 --- a/engine/systems/Physics.ts +++ b/engine/systems/Physics.ts @@ -11,7 +11,7 @@ import { Control, } from "../components"; import { PhysicsConstants } from "../config"; -import type { Force2D } from "../interfaces"; +import type { Force2D, Velocity2D } from "../interfaces"; import { Game } from "../Game"; export class Physics extends System { @@ -23,7 +23,9 @@ export class Physics extends System { game.forEachEntityWithComponent(ComponentNames.Forces, (entity) => { const mass = entity.getComponent(ComponentNames.Mass).mass; const forces = entity.getComponent(ComponentNames.Forces).forces; - const velocity = entity.getComponent(ComponentNames.Velocity); + const velocity = entity.getComponent( + ComponentNames.Velocity, + ).velocity; const inertia = entity.getComponent( ComponentNames.Moment, ).inertia; @@ -73,12 +75,14 @@ export class Physics extends System { }); game.forEachEntityWithComponent(ComponentNames.Velocity, (entity) => { - const velocity: Velocity = new Velocity(); + const velocityComponent: Velocity = new Velocity(); const control = entity.getComponent(ComponentNames.Control); - velocity.add(entity.getComponent(ComponentNames.Velocity)); + velocityComponent.add( + entity.getComponent(ComponentNames.Velocity).velocity, + ); if (control) { - velocity.add(control.controlVelocity); + velocityComponent.add(control.controlVelocityComponent.velocity); } const boundingBox = entity.getComponent( @@ -86,9 +90,9 @@ export class Physics extends System { ); // integrate velocity - boundingBox.center.x += velocity.dCartesian.dx * dt; - boundingBox.center.y += velocity.dCartesian.dy * dt; - boundingBox.rotation += velocity.dTheta * dt; + boundingBox.center.x += velocityComponent.velocity.dCartesian.dx * dt; + boundingBox.center.y += velocityComponent.velocity.dCartesian.dy * dt; + boundingBox.rotation += velocityComponent.velocity.dTheta * dt; boundingBox.rotation = (boundingBox.rotation < 0 ? 360 + boundingBox.rotation @@ -96,7 +100,7 @@ export class Physics extends System { // clear the control velocity if (control) { - control.controlVelocity = new Velocity(); + control.controlVelocityComponent = new Velocity(); } }); }