summaryrefslogtreecommitdiff
path: root/src/engine/systems/Collision.ts
diff options
context:
space:
mode:
authorElizabeth Hunt <elizabeth.hunt@simponic.xyz>2024-03-06 14:35:04 -0700
committerElizabeth Hunt <elizabeth.hunt@simponic.xyz>2024-03-06 14:35:04 -0700
commit823620b2a6ebb7ece619991e47a37ad46542b69f (patch)
tree82a1501c5f707a1bcbc6c28bd6d0f5731cc9f618 /src/engine/systems/Collision.ts
parentce06fa7c29ba4e3d6137f7aa74fbfe45af0e8b73 (diff)
downloadthe-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.ts40
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);
+ }
+ });
}
}