summaryrefslogtreecommitdiff
path: root/src/engine/entities/LockedDoor.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/entities/LockedDoor.ts
parentce06fa7c29ba4e3d6137f7aa74fbfe45af0e8b73 (diff)
downloadthe-abstraction-engine-823620b2a6ebb7ece619991e47a37ad46542b69f.tar.gz
the-abstraction-engine-823620b2a6ebb7ece619991e47a37ad46542b69f.zip
add particles
Diffstat (limited to 'src/engine/entities/LockedDoor.ts')
-rw-r--r--src/engine/entities/LockedDoor.ts47
1 files changed, 44 insertions, 3 deletions
diff --git a/src/engine/entities/LockedDoor.ts b/src/engine/entities/LockedDoor.ts
index 5e364b8..b4887d6 100644
--- a/src/engine/entities/LockedDoor.ts
+++ b/src/engine/entities/LockedDoor.ts
@@ -1,7 +1,16 @@
-import { Entity, EntityNames } from ".";
-import { BoundingBox, Colliding, Grid, Sprite } from "../components";
+import { Entity, EntityNames, Particles } from ".";
+import { Game } from "..";
+import {
+ BoundingBox,
+ Colliding,
+ Grid,
+ Sprite,
+ ComponentNames,
+} from "../components";
import { IMAGES, SPRITE_SPECS, SpriteSpec, Sprites } from "../config";
import { Coord2D } from "../interfaces";
+import { Grid as GridSystem, SystemNames } from "../systems";
+import { colors } from "../utils";
export class LockedDoor extends Entity {
private static spriteSpec: SpriteSpec = SPRITE_SPECS.get(
@@ -13,7 +22,7 @@ export class LockedDoor extends Entity {
this.addComponent(new Grid(gridPosition));
- this.addComponent(new Colliding());
+ this.addComponent(new Colliding(this.handleCollision.bind(this)));
this.addComponent(
new BoundingBox(
@@ -42,4 +51,36 @@ export class LockedDoor extends Entity {
),
);
}
+
+ private handleCollision(game: Game, entity: Entity) {
+ if (entity.name !== EntityNames.Key) {
+ return;
+ }
+
+ game.removeEntity(this.id);
+ game.removeEntity(entity.id);
+
+ const grid = this.getComponent<Grid>(ComponentNames.Grid);
+ const gridSystem = game.getSystem<GridSystem>(SystemNames.Grid);
+ const { dimension } = gridSystem;
+ const particles = new Particles({
+ center: gridSystem.gridToScreenPosition(grid.gridPosition),
+ spawnerDimensions: {
+ width: dimension.width / 2,
+ height: dimension.height / 2,
+ },
+ particleCount: 20,
+ spawnerShape: "rectangle",
+ particleShape: "rectangle",
+ particleMeanSpeed: 0.35,
+ particleSpeedVariance: 0.15,
+ particleMeanLife: 80,
+ particleMeanSize: 3,
+ particleSizeVariance: 1,
+ particleLifeVariance: 20,
+ particleColors: [colors.yellow, colors.lightYellow],
+ });
+
+ game.addEntity(particles);
+ }
}