diff options
Diffstat (limited to 'src/engine/entities/LockedDoor.ts')
-rw-r--r-- | src/engine/entities/LockedDoor.ts | 47 |
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); + } } |