UNPKG

@theatrejs/theatrejs

Version:

🎮 A JavaScript 2D Game Engine focused on creating pixel art games.

164 lines (128 loc) • 3.4 kB
import {Actor, Preloadable, Stage} from '../index.js'; /** * @module FACTORIES */ /** * Prepares an actor with preloadable assets. * @param {Array<typeof Preloadable | typeof Actor<string, string>>} $preloadables The preloadable assets (mix of preloadable assets and/or actors with preloadable assets). * @returns {typeof Actor<string, string>} * * @memberof module:FACTORIES */ function ActorWithPreloadables($preloadables) { /** * @type {Set<string>} */ const preloadables = new Set(); $preloadables.forEach(($preloadable) => { if (typeof $preloadable !== typeof Preloadable) { return; } $preloadable.preloadables.forEach(($preloadable) => { if (preloadables.has($preloadable) === true) { return; } preloadables.add($preloadable); }); }); /** * @ignore */ class ActorWithPreloadables extends Actor { /** * Stores the preloadable assets. * @type {Array<string>} * @public * @static */ static preloadables = Array.from(preloadables); } return ActorWithPreloadables; } /** * Prepares a preloadable sound. * @param {string} $sound The preloadable sound. * @returns {typeof Preloadable} * * @memberof module:FACTORIES */ function PreloadableSound($sound) { /** * @ignore */ class PreloadableSound extends Preloadable { /** * Stores the preloadable assets. * @type {Array<string>} * @public * @static */ static preloadables = [$sound]; } return PreloadableSound; } /** * Prepares a preloadable texture. * @param {string} $texture The preloadable texture. * @returns {typeof Preloadable} * * @memberof module:FACTORIES */ function PreloadableTexture($texture) { /** * @ignore */ class PreloadableTexture extends Preloadable { /** * Stores the preloadable assets. * @type {Array<string>} * @public * @static */ static preloadables = [$texture]; } return PreloadableTexture; } /** * Prepares a stage with preloadable assets. * @param {Array<typeof Preloadable | typeof Actor<string, string>>} $preloadables The preloadable assets (mix of preloadable assets and/or actors with preloadable assets). * @returns {typeof Stage} * * @memberof module:FACTORIES */ function StageWithPreloadables($preloadables) { /** * @type {Set<string>} */ const preloadables = new Set(); $preloadables.forEach(($preloadable) => { if (typeof $preloadable !== typeof Preloadable) { return; } $preloadable.preloadables.forEach(($preloadable) => { if (preloadables.has($preloadable) === true) { return; } preloadables.add($preloadable); }); }); /** * @ignore */ class StageWithPreloadables extends Stage { /** * Stores the preloadable assets. * @type {Array<string>} * @public * @static */ static preloadables = Array.from(preloadables); } return StageWithPreloadables; } export { ActorWithPreloadables, PreloadableSound, PreloadableTexture, StageWithPreloadables };