summaryrefslogtreecommitdiff
path: root/src/engine/entities/Player.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/entities/Player.ts')
-rw-r--r--src/engine/entities/Player.ts58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/engine/entities/Player.ts b/src/engine/entities/Player.ts
new file mode 100644
index 0000000..f25730c
--- /dev/null
+++ b/src/engine/entities/Player.ts
@@ -0,0 +1,58 @@
+import { Entity, EntityNames } from ".";
+import { IMAGES, SPRITE_SPECS, Sprites, type SpriteSpec } from "../config";
+import {
+ FacingDirection,
+ Sprite,
+ GridPosition,
+ BoundingBox,
+} from "../components";
+import { Direction } from "../interfaces/";
+
+export class Player extends Entity {
+ private static spriteSpec: SpriteSpec = SPRITE_SPECS.get(
+ Sprites.PLAYER,
+ ) as SpriteSpec;
+
+ constructor() {
+ super(EntityNames.Player);
+
+ this.addComponent(
+ new BoundingBox(
+ {
+ x: 0,
+ y: 0,
+ },
+ { width: Player.spriteSpec.width, height: Player.spriteSpec.height },
+ 0,
+ ),
+ );
+
+ this.addComponent(new GridPosition(0, 0));
+ this.addFacingDirectionComponents();
+ }
+
+ private addFacingDirectionComponents() {
+ const facingDirectionComponent = new FacingDirection();
+ [
+ Direction.NONE,
+ Direction.LEFT,
+ Direction.RIGHT,
+ Direction.UP,
+ Direction.DOWN,
+ ].forEach((direction) => {
+ const sprite = new Sprite(
+ IMAGES.get(Player.spriteSpec.states!.get(direction)!.sheet!)!,
+ { x: 0, y: 0 },
+ { width: Player.spriteSpec.width, height: Player.spriteSpec.height },
+ Player.spriteSpec.msPerFrame,
+ Player.spriteSpec.frames,
+ );
+ facingDirectionComponent.directionSprites.set(direction, sprite);
+ });
+
+ this.addComponent(facingDirectionComponent);
+ this.addComponent(
+ facingDirectionComponent.directionSprites.get(Direction.NONE)!,
+ ); // face no direction by default
+ }
+}