summaryrefslogtreecommitdiff
path: root/src/engine/entities
diff options
context:
space:
mode:
authorElizabeth Hunt <elizabeth.hunt@simponic.xyz>2024-03-07 22:49:43 -0700
committerElizabeth Hunt <elizabeth.hunt@simponic.xyz>2024-03-07 22:49:43 -0700
commitebae24f5a3a251654a1e41be58f52ba2a777d9d7 (patch)
tree6641c3e5a5ec5d812c54be2bb38196f85f4e36c2 /src/engine/entities
parent808a44e8542ebc7542d833e5a30b51b7fb8f80d5 (diff)
downloadthe-abstraction-engine-ebae24f5a3a251654a1e41be58f52ba2a777d9d7.tar.gz
the-abstraction-engine-ebae24f5a3a251654a1e41be58f52ba2a777d9d7.zip
level system!
Diffstat (limited to 'src/engine/entities')
-rw-r--r--src/engine/entities/Curry.ts12
-rw-r--r--src/engine/entities/EntityNames.ts2
-rw-r--r--src/engine/entities/Grass.ts27
-rw-r--r--src/engine/entities/Player.ts6
-rw-r--r--src/engine/entities/Portal.ts60
-rw-r--r--src/engine/entities/index.ts2
6 files changed, 103 insertions, 6 deletions
diff --git a/src/engine/entities/Curry.ts b/src/engine/entities/Curry.ts
index bd57e19..19c5b91 100644
--- a/src/engine/entities/Curry.ts
+++ b/src/engine/entities/Curry.ts
@@ -3,6 +3,8 @@ import { Game } from "..";
import { BoundingBox, Colliding, Grid, Sprite } from "../components";
import { IMAGES, SPRITE_SPECS, SpriteSpec, Sprites } from "../config";
import { Coord2D } from "../interfaces";
+import { LevelNames } from "../levels";
+import { Level, SystemNames } from "../systems";
export class Curry extends Entity {
private static spriteSpec: SpriteSpec = SPRITE_SPECS.get(
@@ -45,9 +47,13 @@ export class Curry extends Entity {
}
private collisionHandler(game: Game, entity: Entity) {
- if (entity.name === EntityNames.Player) {
- game.removeEntity(this.id);
- game.stop();
+ if (entity.name !== EntityNames.Player) {
+ return;
}
+
+ game.removeEntity(this.id);
+
+ const levelSystem = game.getSystem<Level>(SystemNames.Level);
+ levelSystem.setLevel(LevelNames.LevelSelection);
}
}
diff --git a/src/engine/entities/EntityNames.ts b/src/engine/entities/EntityNames.ts
index 056db9a..b4fbbb2 100644
--- a/src/engine/entities/EntityNames.ts
+++ b/src/engine/entities/EntityNames.ts
@@ -8,4 +8,6 @@ export namespace EntityNames {
export const Curry = "Curry";
export const FunctionApplication = "FunctionApplication";
export const Particles = "Particles";
+ export const Portal = "Portal";
+ export const Grass = "Grass";
}
diff --git a/src/engine/entities/Grass.ts b/src/engine/entities/Grass.ts
new file mode 100644
index 0000000..70fd601
--- /dev/null
+++ b/src/engine/entities/Grass.ts
@@ -0,0 +1,27 @@
+import { Entity, EntityNames } from ".";
+import { Grid, Sprite } from "../components";
+import { IMAGES, SPRITE_SPECS, SpriteSpec, Sprites } from "../config";
+import { Coord2D } from "../interfaces";
+
+export class Grass extends Entity {
+ private static spriteSpec = SPRITE_SPECS.get(Sprites.GRASS) as SpriteSpec;
+
+ constructor(gridPosition: Coord2D) {
+ super(EntityNames.Grass);
+
+ this.addComponent(new Grid(gridPosition));
+
+ this.addComponent(
+ new Sprite(
+ IMAGES.get(Grass.spriteSpec.sheet)!,
+ { x: 0, y: 0 },
+ {
+ width: Grass.spriteSpec.width,
+ height: Grass.spriteSpec.height,
+ },
+ Grass.spriteSpec.msPerFrame,
+ Grass.spriteSpec.frames,
+ ),
+ );
+ }
+}
diff --git a/src/engine/entities/Player.ts b/src/engine/entities/Player.ts
index 1b98383..9e2e1cb 100644
--- a/src/engine/entities/Player.ts
+++ b/src/engine/entities/Player.ts
@@ -8,14 +8,14 @@ import {
Control,
Pushable,
} from "../components";
-import { Direction } from "../interfaces/";
+import { Coord2D, Direction } from "../interfaces/";
export class Player extends Entity {
private static spriteSpec: SpriteSpec = SPRITE_SPECS.get(
Sprites.PLAYER,
) as SpriteSpec;
- constructor() {
+ constructor(gridPosition: Coord2D) {
super(EntityNames.Player);
this.addComponent(
@@ -33,7 +33,7 @@ export class Player extends Entity {
this.addComponent(new Control());
- this.addComponent(new Grid());
+ this.addComponent(new Grid(gridPosition));
this.addFacingDirectionComponents();
}
diff --git a/src/engine/entities/Portal.ts b/src/engine/entities/Portal.ts
new file mode 100644
index 0000000..a747aa9
--- /dev/null
+++ b/src/engine/entities/Portal.ts
@@ -0,0 +1,60 @@
+import { Entity, EntityNames } from ".";
+import { Game } from "..";
+import { BoundingBox, Colliding, Grid, Sprite, Text } from "../components";
+import { IMAGES, SPRITE_SPECS, SpriteSpec, Sprites } from "../config";
+import { Coord2D } from "../interfaces";
+import { Level, SystemNames } from "../systems";
+
+export class Portal extends Entity {
+ private static spriteSpec = SPRITE_SPECS.get(Sprites.PORTAL) as SpriteSpec;
+
+ private toLevel: string;
+
+ constructor(toLevel: string, gridPosition: Coord2D) {
+ super(EntityNames.Portal);
+
+ this.toLevel = toLevel;
+
+ this.addComponent(
+ new BoundingBox(
+ {
+ x: 0,
+ y: 0,
+ },
+ {
+ width: Portal.spriteSpec.width,
+ height: Portal.spriteSpec.height,
+ },
+ 0,
+ ),
+ );
+
+ this.addComponent(
+ new Sprite(
+ IMAGES.get(Portal.spriteSpec.sheet)!,
+ { x: 0, y: 0 },
+ {
+ width: Portal.spriteSpec.width,
+ height: Portal.spriteSpec.height,
+ },
+ Portal.spriteSpec.msPerFrame,
+ Portal.spriteSpec.frames,
+ ),
+ );
+
+ this.addComponent(new Colliding(this.handleCollision.bind(this)));
+
+ this.addComponent(new Grid(gridPosition));
+
+ this.addComponent(new Text(toLevel));
+ }
+
+ public handleCollision(game: Game, entity: Entity) {
+ if (entity.name !== EntityNames.Player) {
+ return;
+ }
+
+ const levelSystem = game.getSystem<Level>(SystemNames.Level);
+ levelSystem.setLevel(this.toLevel);
+ }
+}
diff --git a/src/engine/entities/index.ts b/src/engine/entities/index.ts
index cb256ec..260db5b 100644
--- a/src/engine/entities/index.ts
+++ b/src/engine/entities/index.ts
@@ -9,3 +9,5 @@ export * from "./LockedDoor";
export * from "./Curry";
export * from "./FunctionApplication";
export * from "./Particles";
+export * from "./Portal";
+export * from "./Grass";