diff options
Diffstat (limited to 'engine/entities')
-rw-r--r-- | engine/entities/Entity.ts | 18 | ||||
-rw-r--r-- | engine/entities/Floor.ts | 4 | ||||
-rw-r--r-- | engine/entities/Player.ts | 20 | ||||
-rw-r--r-- | engine/entities/index.ts | 7 | ||||
-rw-r--r-- | engine/entities/names.ts | 4 |
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"; +} |