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.

108 lines 3.42 kB
import MusicDefinition from './MusicDefinition'; var sfxVolume = 0.45; var sfxs = []; /** * Populate sfx manifest with JSON list of definitions. Manifest is an arry of * objects matching format { "name": "track id ref", "filename": "./file_path/filename.ext" }, * @param json JSON representation of image definitions. */ function musicManifestFromJSON(json) { json.forEach((function (def) { return sfxs.push(MusicDefinition.fromJSON(def)); })); } /** * Whether or not the named track is currently playing. * @param name Music track asset id. * @returns */ function isPlaying(name) { var sf = getTrack(name); if (sf) { return !sf.paused || sf.currentTime && sf.currentTime < sf.duration; } return false; } /** * Get the named audio element. * @param name Music track asset id. * @returns */ function getTrack(name) { var sf = sfxs.filter(function (f) { return f.name === name; }); return sf.length > 0 ? sf[0].track : null; } /** * Play specified track. * @param name Music track asset id. * @param onEnded Optional callback for when the track ends. * @returns */ function playTrack(name, 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].track.volume = sfxVolume; if (onEnded) { sf_1[0].track.onended = function () { onEnded(sf_1[0]); sf_1[0].track.onended = function () { resolve(); }; }; } else { sf_1[0].track.onended = function () { resolve(); }; } sf_1[0].track.play(); } else { sf_1[0].track.currentTime = 0; } } } catch (e) { console.log('Error playing sfx', name, e); } }); } /** * Load track from location. * @param filename Path to audio asset. * @returns */ function loadTrack(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); }; }); } /** * Load all tracks that have been loaded into the manifest. * @returns */ function loadAllTracks() { return new Promise(function (resolveAll, rejectAll) { var promises = []; var _loop_1 = function (i) { var sfx = sfxs[i]; promises.push(new Promise(function (resolve) { return loadTrack(sfx.filename).then(function (r) { sfx.track = 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 { loadAllTracks, loadTrack, playTrack, getTrack, isPlaying, musicManifestFromJSON }; //# sourceMappingURL=music.js.map