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/config | |
download | jumpstorm-0fd9fb097552686f2257c1aa689d797e80057bd1.tar.gz jumpstorm-0fd9fb097552686f2257c1aa689d797e80057bd1.zip |
initial commit
Diffstat (limited to 'client/lib/config')
-rw-r--r-- | client/lib/config/assets.ts | 40 | ||||
-rw-r--r-- | client/lib/config/constants.ts | 34 | ||||
-rw-r--r-- | client/lib/config/index.ts | 3 | ||||
-rw-r--r-- | client/lib/config/sprites.ts | 49 |
4 files changed, 126 insertions, 0 deletions
diff --git a/client/lib/config/assets.ts b/client/lib/config/assets.ts new file mode 100644 index 0000000..51a5303 --- /dev/null +++ b/client/lib/config/assets.ts @@ -0,0 +1,40 @@ +import type { SpriteSpec } from "./sprites"; +import { SPRITE_SPECS } from "./sprites"; + +export const IMAGES = new Map<string, HTMLImageElement>(); + +export const loadSpritesIntoImageElements = ( + spriteSpecs: Partial<SpriteSpec>[] +): Promise<void>[] => { + const spritePromises: Promise<void>[] = []; + + for (const spriteSpec of spriteSpecs) { + if (spriteSpec.sheet) { + const img = new Image(); + img.src = spriteSpec.sheet; + IMAGES.set(spriteSpec.sheet, img); + + spritePromises.push( + new Promise((resolve) => { + img.onload = () => resolve(); + }) + ); + } + + if (spriteSpec.states) { + spritePromises.push( + ...loadSpritesIntoImageElements(Object.values(spriteSpec.states)) + ); + } + } + + return spritePromises; +}; + +export const loadAssets = () => + Promise.all([ + ...loadSpritesIntoImageElements( + Array.from(SPRITE_SPECS.keys()).map((key) => SPRITE_SPECS.get(key)) + ), + // TODO: Sound + ]); diff --git a/client/lib/config/constants.ts b/client/lib/config/constants.ts new file mode 100644 index 0000000..27c8160 --- /dev/null +++ b/client/lib/config/constants.ts @@ -0,0 +1,34 @@ +import { Action } from "../interfaces"; + +export namespace KeyConstants { + export const KeyActions: Record<string, Action> = { + a: Action.MOVE_LEFT, + ArrowLeft: Action.MOVE_LEFT, + d: Action.MOVE_RIGHT, + ArrowRight: Action.MOVE_RIGHT, + w: Action.JUMP, + ArrowUp: Action.JUMP, + }; + + export const ActionKeys: Map<Action, string[]> = Object.keys( + KeyActions + ).reduce((acc: Map<Action, string[]>, key) => { + const action = KeyActions[key]; + + if (acc.has(action)) { + acc.get(action).push(key); + return acc; + } + + acc.set(action, [key]); + return acc; + }, new Map<Action, string[]>()); +} + +export namespace PhysicsConstants { + export const MAX_JUMP_TIME_MS = 150; + export const GRAVITY = 0.0075; + export const PLAYER_MOVE_VEL = 1; + export const PLAYER_JUMP_ACC = -0.01; + export const PLAYER_JUMP_INITIAL_VEL = -0.9; +} diff --git a/client/lib/config/index.ts b/client/lib/config/index.ts new file mode 100644 index 0000000..7a1052a --- /dev/null +++ b/client/lib/config/index.ts @@ -0,0 +1,3 @@ +export * from "./constants"; +export * from "./assets.ts"; +export * from "./sprites.ts"; diff --git a/client/lib/config/sprites.ts b/client/lib/config/sprites.ts new file mode 100644 index 0000000..18bec73 --- /dev/null +++ b/client/lib/config/sprites.ts @@ -0,0 +1,49 @@ +export enum Sprites { + FLOOR, + TRAMPOLINE, + COFFEE, +} + +export interface SpriteSpec { + sheet: string; + width: number; + height: number; + frames: number; + msPerFrame: number; + states?: Record<string | number, Partial<SpriteSpec>>; +} + +export const SPRITE_SPECS: Map<Sprites, Partial<SpriteSpec>> = new Map< + Sprites, + SpriteSpec +>(); + +const floorSpriteSpec = { + height: 40, + frames: 3, + msPerFrame: 125, + states: {}, +}; +floorSpriteSpec.states = [40, 80, 120, 160].reduce((acc, cur) => { + acc[cur] = { + width: cur, + sheet: `/assets/floor_tile_${cur}.png`, + }; + return acc; +}, {}); +SPRITE_SPECS.set(Sprites.FLOOR, floorSpriteSpec); + +SPRITE_SPECS.set(Sprites.COFFEE, { + msPerFrame: 100, + width: 60, + height: 45, + frames: 3, + states: { + LEFT: { + sheet: "/assets/coffee_left.png", + }, + RIGHT: { + sheet: "/assets/coffee_right.png", + }, + }, +}); |