diff options
author | Elizabeth Hunt <elizabeth.hunt@simponic.xyz> | 2023-07-19 20:38:24 -0700 |
---|---|---|
committer | Elizabeth Hunt <elizabeth.hunt@simponic.xyz> | 2023-07-19 20:38:24 -0700 |
commit | 0fd9fb097552686f2257c1aa689d797e80057bd1 (patch) | |
tree | b8d0367bf7b62c049af60ace301ce1cffc08d821 /client/lib/entities/Player.ts | |
download | jumpstorm-0fd9fb097552686f2257c1aa689d797e80057bd1.tar.gz jumpstorm-0fd9fb097552686f2257c1aa689d797e80057bd1.zip |
initial commit
Diffstat (limited to 'client/lib/entities/Player.ts')
-rw-r--r-- | client/lib/entities/Player.ts | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/client/lib/entities/Player.ts b/client/lib/entities/Player.ts new file mode 100644 index 0000000..0ba5a41 --- /dev/null +++ b/client/lib/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 + } +} |