diff options
author | Elizabeth Hunt <elizabeth@simponic.xyz> | 2025-03-02 19:11:33 -0700 |
---|---|---|
committer | Elizabeth Hunt <elizabeth@simponic.xyz> | 2025-03-02 19:11:33 -0700 |
commit | 78797aa175651d53df21d3f8d5c51a55649aaced (patch) | |
tree | cd3c5e168e069c5ac2c18514f0f69543d077ec30 /src/engine/systems | |
parent | 196773c3637f7dcf2a53a6cb9b3a8e8f790cce71 (diff) | |
download | the-abstraction-engine-main.tar.gz the-abstraction-engine-main.zip |
Diffstat (limited to 'src/engine/systems')
-rw-r--r-- | src/engine/systems/FacingDirection.ts | 44 | ||||
-rw-r--r-- | src/engine/systems/Grid.ts | 3 | ||||
-rw-r--r-- | src/engine/systems/RadialObserve.ts | 10 |
3 files changed, 34 insertions, 23 deletions
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<BoundingBox>( - ComponentNames.BoundingBox, - )!; const facingDirection = entity.getComponent<FacingDirectionComponent>( 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<BoundingBox>( + 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<Sprite>(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<GridComponent>(ComponentNames.Grid)!; const facingDirection = entity.getComponent<FacingDirection>( 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<Grid>( @@ -54,7 +58,7 @@ export class RadialObserve extends System { }); for (const observation of observations) { - entityObserve.onObservation!(game, observation); + entityObserve.onObservation!(game, observation); } }); } |