summaryrefslogtreecommitdiff
path: root/engine/entities
diff options
context:
space:
mode:
Diffstat (limited to 'engine/entities')
-rw-r--r--engine/entities/Entity.ts18
-rw-r--r--engine/entities/Floor.ts4
-rw-r--r--engine/entities/Player.ts20
-rw-r--r--engine/entities/index.ts7
-rw-r--r--engine/entities/names.ts4
5 files changed, 35 insertions, 18 deletions
diff --git a/engine/entities/Entity.ts b/engine/entities/Entity.ts
index 4e9df78..88982cb 100644
--- a/engine/entities/Entity.ts
+++ b/engine/entities/Entity.ts
@@ -1,10 +1,13 @@
+import { EntityNames, Player } from ".";
import type { Component } from "../components";
export abstract class Entity {
- public readonly id: string;
- public readonly components: Map<string, Component>;
+ public id: string;
+ public components: Map<string, Component>;
+ public name: string;
- constructor(id: string = crypto.randomUUID()) {
+ constructor(name: string, id: string = crypto.randomUUID()) {
+ this.name = name;
this.id = id;
this.components = new Map();
}
@@ -27,4 +30,13 @@ export abstract class Entity {
public hasComponent(name: string): boolean {
return this.components.has(name);
}
+
+ static from(entityName: string, args: any): Entity {
+ switch (entityName) {
+ case EntityNames.Player:
+ return new Player(args.playerId);
+ default:
+ throw new Error(".from() Entity type not implemented: " + entityName);
+ }
+ }
}
diff --git a/engine/entities/Floor.ts b/engine/entities/Floor.ts
index b204ce0..6cfc276 100644
--- a/engine/entities/Floor.ts
+++ b/engine/entities/Floor.ts
@@ -1,7 +1,7 @@
import { IMAGES, SPRITE_SPECS, Sprites, type SpriteSpec } from "../config";
import { BoundingBox, Sprite } from "../components";
import { TopCollidable } from "../components/TopCollidable";
-import { Entity } from "../entities";
+import { Entity, EntityNames } from "../entities";
export class Floor extends Entity {
private static spriteSpec: SpriteSpec = SPRITE_SPECS.get(
@@ -9,7 +9,7 @@ export class Floor extends Entity {
) as SpriteSpec;
constructor(width: number) {
- super();
+ super(EntityNames.Floor);
this.addComponent(
new Sprite(
diff --git a/engine/entities/Player.ts b/engine/entities/Player.ts
index 03fa69b..cfe4dd2 100644
--- a/engine/entities/Player.ts
+++ b/engine/entities/Player.ts
@@ -1,4 +1,4 @@
-import { Entity } from ".";
+import { Entity, EntityNames } from ".";
import { IMAGES, SPRITE_SPECS, Sprites, type SpriteSpec } from "../config";
import {
Jump,
@@ -21,11 +21,11 @@ export class Player extends Entity {
private static MOI: number = 100;
private static spriteSpec: SpriteSpec = SPRITE_SPECS.get(
- Sprites.COFFEE
+ Sprites.COFFEE,
) as SpriteSpec;
- constructor() {
- super();
+ constructor(playerId: string) {
+ super(EntityNames.Player);
this.addComponent(
new BoundingBox(
@@ -34,12 +34,12 @@ export class Player extends Entity {
y: 100,
},
{ width: Player.spriteSpec.width, height: Player.spriteSpec.height },
- 0
- )
+ 0,
+ ),
);
this.addComponent(
- new Velocity({ dCartesian: { dx: 0, dy: 0 }, dTheta: 0 })
+ new Velocity({ dCartesian: { dx: 0, dy: 0 }, dTheta: 0 }),
);
this.addComponent(new Mass(Player.MASS));
@@ -48,7 +48,7 @@ export class Player extends Entity {
this.addComponent(new Gravity());
this.addComponent(new Jump());
- this.addComponent(new Control());
+ this.addComponent(new Control(playerId));
this.addComponent(new Collide());
this.addComponent(new WallBounded());
@@ -64,8 +64,8 @@ export class Player extends Entity {
{ x: 0, y: 0 },
{ width: Player.spriteSpec.width, height: Player.spriteSpec.height },
Player.spriteSpec.msPerFrame,
- Player.spriteSpec.frames
- )
+ Player.spriteSpec.frames,
+ ),
);
this.addComponent(new FacingDirection(leftSprite, rightSprite));
diff --git a/engine/entities/index.ts b/engine/entities/index.ts
index a921512..dd3dba9 100644
--- a/engine/entities/index.ts
+++ b/engine/entities/index.ts
@@ -1,3 +1,4 @@
-export * from "./Entity";
-export * from "./Floor";
-export * from "./Player";
+export * from "./Entity";
+export * from "./Floor";
+export * from "./Player";
+export * from "./names";
diff --git a/engine/entities/names.ts b/engine/entities/names.ts
new file mode 100644
index 0000000..21594c8
--- /dev/null
+++ b/engine/entities/names.ts
@@ -0,0 +1,4 @@
+export namespace EntityNames {
+ export const Player = "Player";
+ export const Floor = "Floor";
+}