summaryrefslogtreecommitdiff
path: root/engine/entities/Player.ts
diff options
context:
space:
mode:
authorElizabeth Hunt <elizabeth.hunt@simponic.xyz>2023-07-20 20:47:32 -0700
committerElizabeth Hunt <elizabeth.hunt@simponic.xyz>2023-07-20 20:47:32 -0700
commit72c6c7de12e9833f52bf2d0718d70f044f8ab57e (patch)
tree152f5f31d59011bb8c617bfbcfc44cc8f47ecad5 /engine/entities/Player.ts
parent0fd9fb097552686f2257c1aa689d797e80057bd1 (diff)
downloadjumpstorm-72c6c7de12e9833f52bf2d0718d70f044f8ab57e.tar.gz
jumpstorm-72c6c7de12e9833f52bf2d0718d70f044f8ab57e.zip
a bit of refactoring; importing engine into bun for server
Diffstat (limited to 'engine/entities/Player.ts')
-rw-r--r--engine/entities/Player.ts68
1 files changed, 68 insertions, 0 deletions
diff --git a/engine/entities/Player.ts b/engine/entities/Player.ts
new file mode 100644
index 0000000..0ba5a41
--- /dev/null
+++ b/engine/entities/Player.ts
@@ -0,0 +1,68 @@
+import { Entity } from ".";
+import { IMAGES, SPRITE_SPECS, Sprites, type SpriteSpec } from "../config";
+import {
+ Jump,
+ FacingDirection,
+ BoundingBox,
+ Sprite,
+ Velocity,
+ Gravity,
+ WallBounded,
+ Forces,
+ Collide,
+ Control,
+ Mass,
+ Moment,
+} from "../components";
+import { PhysicsConstants } from "../config";
+import { Direction } from "../interfaces";
+
+export class Player extends Entity {
+ private static MASS: number = 10;
+ private static MOI: number = 1000;
+
+ private static spriteSpec: SpriteSpec = SPRITE_SPECS.get(Sprites.COFFEE);
+
+ constructor() {
+ super();
+
+ this.addComponent(
+ new BoundingBox(
+ { x: 300, y: 100 },
+ { width: Player.spriteSpec.width, height: Player.spriteSpec.height },
+ 0
+ )
+ );
+
+ this.addComponent(new Velocity({ dx: 0, dy: 0 }, 0));
+
+ this.addComponent(new Mass(Player.MASS));
+ this.addComponent(new Moment(Player.MOI));
+ this.addComponent(new Forces());
+ this.addComponent(new Gravity());
+
+ this.addComponent(new Jump());
+ this.addComponent(new Control());
+
+ this.addComponent(new Collide());
+ this.addComponent(new WallBounded());
+
+ this.addFacingDirectionComponents();
+ }
+
+ private addFacingDirectionComponents() {
+ const [leftSprite, rightSprite] = [Direction.LEFT, Direction.RIGHT].map(
+ (direction) =>
+ new Sprite(
+ IMAGES.get(Player.spriteSpec.states[direction].sheet),
+ { x: 0, y: 0 },
+ { width: Player.spriteSpec.width, height: Player.spriteSpec.height },
+ Player.spriteSpec.msPerFrame,
+ Player.spriteSpec.frames
+ )
+ );
+
+ this.addComponent(new FacingDirection(leftSprite, rightSprite));
+ this.addComponent(leftSprite); // face Left by default
+ }
+}