import type { SpriteSpec } from "./sprites"; import { SPRITE_SPECS } from "./sprites"; export const IMAGES = new Map(); export const loadSpritesIntoImageElements = ( spriteSpecs: Partial[], ): Promise[] => { const spritePromises: Promise[] = []; 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(Array.from(spriteSpec.states.values())), ); } } return spritePromises; }; export const loadAssets = () => Promise.all([ ...loadSpritesIntoImageElements( Array.from(SPRITE_SPECS.keys()).map( (key) => SPRITE_SPECS.get(key) as SpriteSpec, ), ), // TODO: Sound ]);