From 78797aa175651d53df21d3f8d5c51a55649aaced Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Sun, 2 Mar 2025 19:11:33 -0700 Subject: pistons --- src/engine/systems/FacingDirection.ts | 44 +++++++++++++++++++---------------- src/engine/systems/Grid.ts | 3 +++ src/engine/systems/RadialObserve.ts | 10 +++++--- 3 files changed, 34 insertions(+), 23 deletions(-) (limited to 'src/engine/systems') diff --git a/src/engine/systems/FacingDirection.ts b/src/engine/systems/FacingDirection.ts index 042484a..ec73d58 100644 --- a/src/engine/systems/FacingDirection.ts +++ b/src/engine/systems/FacingDirection.ts @@ -27,34 +27,38 @@ export class FacingDirection extends System { game.forEachEntityWithComponent( ComponentNames.FacingDirection, (entity) => { - if (!entity.hasComponent(ComponentNames.BoundingBox)) { - return; - } - - const boundingBox = entity.getComponent( - ComponentNames.BoundingBox, - )!; const facingDirection = entity.getComponent( ComponentNames.FacingDirection, ); + if (!entity.hasComponent(ComponentNames.Sprite)) { + return; + } - const { center } = boundingBox; - const angle = Math.atan2( - mousePosition.y - center.y, - mousePosition.x - center.x, - ); + if (entity.hasComponent(ComponentNames.Control)) { + const boundingBox = entity.getComponent( + ComponentNames.BoundingBox, + )!; - const mouseInBoundingBox = - boundingBox.isCollidingWith(mouseBoundingBox); - const direction = mouseInBoundingBox - ? Direction.NONE - : angleToDirection(angle); + const { center } = boundingBox; + const angle = Math.atan2( + mousePosition.y - center.y, + mousePosition.x - center.x, + ); - facingDirection.setDirection(direction); - entity.addComponent(facingDirection); + const mouseInBoundingBox = + boundingBox.isCollidingWith(mouseBoundingBox); + const direction = mouseInBoundingBox + ? Direction.NONE + : angleToDirection(angle); + + facingDirection.setDirection(direction); + entity.addComponent(facingDirection); + } const oldSprite = entity.getComponent(ComponentNames.Sprite); - const sprite = facingDirection.directionSprites.get(direction)!; + const sprite = facingDirection.directionSprites.get( + facingDirection.currentDirection, + )!; sprite.fillTimingsFromSprite(oldSprite); entity.addComponent(sprite); diff --git a/src/engine/systems/Grid.ts b/src/engine/systems/Grid.ts index 2eea704..d5436f4 100644 --- a/src/engine/systems/Grid.ts +++ b/src/engine/systems/Grid.ts @@ -54,6 +54,9 @@ export class Grid extends System { if (!entity.hasComponent(ComponentNames.Grid)) { return; } + if (!entity.hasComponent(ComponentNames.Control)) { + return; + } const grid = entity.getComponent(ComponentNames.Grid)!; const facingDirection = entity.getComponent( diff --git a/src/engine/systems/RadialObserve.ts b/src/engine/systems/RadialObserve.ts index 581452c..f303219 100644 --- a/src/engine/systems/RadialObserve.ts +++ b/src/engine/systems/RadialObserve.ts @@ -1,5 +1,9 @@ import { System, SystemNames } from "."; -import { ComponentNames, Grid, RadialObserve as RadialObserveComponent } from "../components"; +import { + ComponentNames, + Grid, + RadialObserve as RadialObserveComponent, +} from "../components"; import { Entity, EntityNames } from "../entities"; import { Game } from "../Game"; import { cartesianDistance } from "../interfaces"; @@ -24,7 +28,7 @@ export class RadialObserve extends System { ComponentNames.RadialObserve, ); if (!entityObserve.onObservation) { - return; + return; } const entityPosition = entity.getComponent( @@ -54,7 +58,7 @@ export class RadialObserve extends System { }); for (const observation of observations) { - entityObserve.onObservation!(game, observation); + entityObserve.onObservation!(game, observation); } }); } -- cgit v1.2.3-70-g09d2