diff options
author | Elizabeth Hunt <elizabeth.hunt@simponic.xyz> | 2024-03-06 14:35:04 -0700 |
---|---|---|
committer | Elizabeth Hunt <elizabeth.hunt@simponic.xyz> | 2024-03-06 14:35:04 -0700 |
commit | 823620b2a6ebb7ece619991e47a37ad46542b69f (patch) | |
tree | 82a1501c5f707a1bcbc6c28bd6d0f5731cc9f618 /src/engine/systems/Collision.ts | |
parent | ce06fa7c29ba4e3d6137f7aa74fbfe45af0e8b73 (diff) | |
download | the-abstraction-engine-823620b2a6ebb7ece619991e47a37ad46542b69f.tar.gz the-abstraction-engine-823620b2a6ebb7ece619991e47a37ad46542b69f.zip |
add particles
Diffstat (limited to 'src/engine/systems/Collision.ts')
-rw-r--r-- | src/engine/systems/Collision.ts | 40 |
1 files changed, 10 insertions, 30 deletions
diff --git a/src/engine/systems/Collision.ts b/src/engine/systems/Collision.ts index 1912fb6..8ef8215 100644 --- a/src/engine/systems/Collision.ts +++ b/src/engine/systems/Collision.ts @@ -1,7 +1,7 @@ import { System, SystemNames } from "."; import { Game } from ".."; import { Entity, EntityNames } from "../entities"; -import { BoundingBox, ComponentNames, Grid } from "../components"; +import { BoundingBox, Colliding, ComponentNames, Grid } from "../components"; const collisionMap: Record<string, Set<string>> = { [EntityNames.Key]: new Set([EntityNames.LockedDoor]), @@ -70,34 +70,14 @@ export class Collision extends System { return; } - const keyDoorPair = [EntityNames.Key, EntityNames.LockedDoor].map((x) => - [entity, otherEntity].find((y) => y.name === x), - ); - const [key, door] = keyDoorPair; - if (key && door) { - this.handleKeyDoorCollision(key, door, game); - } - - const curryPlayerPair = [EntityNames.Curry, EntityNames.Player].map((x) => - [entity, otherEntity].find((y) => y.name === x), - ); - const [curry, player] = curryPlayerPair; - if (curry && player) { - this.handleCurryPlayerCollision(curry, player, game); - } - } - - private handleKeyDoorCollision(key: Entity, door: Entity, game: Game) { - game.removeEntity(key.id); - game.removeEntity(door.id); - } - - private handleCurryPlayerCollision( - curry: Entity, - _player: Entity, - game: Game, - ) { - game.removeEntity(curry.id); - game.stop(); + [entity, otherEntity].forEach((e) => { + if (!e.hasComponent(ComponentNames.Colliding)) { + return; + } + const colliding = e.getComponent<Colliding>(ComponentNames.Colliding); + if (colliding?.onCollision) { + colliding.onCollision(game, e === entity ? otherEntity : entity); + } + }); } } |