UNPKG

retrolib

Version:

Render low-res scenes to the canvas in a retro 8-bit era style. Aseprite exported animation wrapper, scene management, sound and image management, particle support.

98 lines 3.38 kB
import SfxDefinition from "./SfxDefinition"; var sfxVolume = 0.45; export function setVolume(name, volume) { var sfx = sfxs.filter(function (f) { return f.name === name; }); if (sfx.length > 0) { sfx[0].sfx.volume = volume; } } export function setGlobalVolume(volume) { sfxVolume = volume; sfxs.forEach(function (sfx) { return sfx.sfx.volume = volume; }); } var sfxs = []; /** * Populate sfx manifest with JSON list of definitions. Manifest is an arry of * objects matching format { "name": "sfx id ref", "filename": "./file_path/filename.ext" }, * @param json JSON representation of image definitions. */ function sfxManifestFromJSON(json) { json.forEach((function (def) { return sfxs.push(SfxDefinition.fromJSON(def)); })); } export function addSfxToManifest(sfxName, filename) { var sfx = { filename: filename, sfx: null, name: sfxName }; sfxs.push(sfx); } function isPlaying(name) { var sf = getSfx(name); if (sf) { return !sf.paused || sf.currentTime && sf.currentTime < sf.duration; } return false; } function getSfx(name) { var sf = sfxs.filter(function (f) { return f.name === name; }); return sf.length > 0 ? sf[0].sfx : null; } function playSfx(name, onEnded) { onEnded = onEnded === undefined ? function () { } : onEnded; return new Promise(function (resolve) { try { var sf_1 = sfxs.filter(function (f) { return f.name === name; }); if (sf_1.length > 0) { if (!isPlaying(name)) { sf_1[0].sfx.volume = sfxVolume; if (onEnded) { sf_1[0].sfx.onended = function () { onEnded(sf_1[0]); sf_1[0].sfx.onended = function () { resolve(); }; }; } else { sf_1[0].sfx.onended = function () { resolve(); }; } sf_1[0].sfx.play(); } else { sf_1[0].sfx.currentTime = 0; } } } catch (e) { console.log('Error playing sfx', name, e); } }); } function loadSfx(filename) { return new Promise(function (resolve, reject) { var sf = new Audio(filename); sf.oncanplaythrough = function () { resolve(sf); }; sf.onerror = function (e) { console.error("Failed to load file ".concat(filename, ":"), e); reject(e); }; }); } function loadAllSfx() { return new Promise(function (resolveAll, rejectAll) { var promises = []; var _loop_1 = function (i) { var sfx = sfxs[i]; promises.push(new Promise(function (resolve) { return loadSfx(sfx.filename).then(function (r) { sfx.sfx = r; resolve(r); }).catch(function (e) { console.error('Failed to load', sfx.filename, e); rejectAll('Failed to load' + sfx.filename + ':' + JSON.stringify(e)); }); })); }; for (var i in sfxs) { _loop_1(i); } return Promise.allSettled(promises); }); } export { loadAllSfx, loadSfx, playSfx, getSfx, isPlaying, sfxManifestFromJSON }; //# sourceMappingURL=sfx.js.map