diff options
Diffstat (limited to 'www')
-rw-r--r-- | www/js/api.js | 26 | ||||
-rw-r--r-- | www/js/html5ks.js | 7 | ||||
-rw-r--r-- | www/js/i18n.js | 2 | ||||
-rw-r--r-- | www/js/imachine.js | 8 | ||||
-rw-r--r-- | www/js/menu.js | 4 |
5 files changed, 31 insertions, 16 deletions
diff --git a/www/js/api.js b/www/js/api.js index 648d0f8..89ecdd3 100644 --- a/www/js/api.js +++ b/www/js/api.js @@ -51,12 +51,18 @@ window.html5ks.api = new (function () { volume = html5ks.persistent.sfxVolume; } - ["opus", "ogg", "m4a", "wav"].some(function (type) { - if (Modernizr.audio[type]) { - audio.src = src + "." + type; - return true; + var types = ["opus", "ogg", "m4a", "wav"]; + + var setNextType = function (i) { + for (; i < types.length; i++) { + if (Modernizr.audio[types[i]]) { + audio.src = src + "." + types[i]; + return i; + } } - }); + }; + + var i = setNextType(0); audio.addEventListener("playing", function playing() { audio.removeEventListener("playing", playing, false); @@ -66,8 +72,14 @@ window.html5ks.api = new (function () { deferred.resolve(); }, false); audio.onerror = function (e) { - console.error(audio.error); - deferred.resolve(); + if (e.code === e.MEDIA_ERR_SRC_NOT_SUPPORTED) { + i = setNextType(i); + if (i) { + deferred.resolve(); + } else { + throw new Error(e); + } + } }; audio.load(); audio.volume = fade ? 0 : volume; diff --git a/www/js/html5ks.js b/www/js/html5ks.js index f6f226a..25b7c23 100644 --- a/www/js/html5ks.js +++ b/www/js/html5ks.js @@ -178,10 +178,10 @@ window.html5ks = { delete d[k]; } } - }); + }, console.error); html5ks.api.movie_cutscene("4ls", true).then(function () { html5ks.menu.mainMenu(); - }); + }, console.error); }, fetch: function (type, name) { var deferred = when.defer(); @@ -197,6 +197,9 @@ window.html5ks = { html5ks.data[name] = d; deferred.resolve(d); }; + xhr.onerror = function () { + deferred.reject(); + }; xhr.send(); } break; diff --git a/www/js/i18n.js b/www/js/i18n.js index 692104d..a41a7d2 100644 --- a/www/js/i18n.js +++ b/www/js/i18n.js @@ -9,6 +9,6 @@ html5ks.i18n = { e[i].textContent = uiStrings[k]; } } - }); + }, console.error); } }; diff --git a/www/js/imachine.js b/www/js/imachine.js index c2cc03b..ba2894e 100644 --- a/www/js/imachine.js +++ b/www/js/imachine.js @@ -39,17 +39,17 @@ html5ks.imachine = new (function () { case "act_op": switch (inst[1]) { case "op_vid1": - html5ks.api.movie_cutscene("op_1").then(runInst); + html5ks.api.movie_cutscene("op_1").then(runInst, deferred.reject); break; default: - html5ks.api[cmd].apply(html5ks.api, args).then(function () { runInst(); }); + html5ks.api[cmd].apply(html5ks.api, args).then(function () { runInst(); }, deferred.reject); } break; case "imenu": html5ks.api.iscene(args[0]).then(function (choice) { this._return = choice; runInst(); - }.bind(this)); + }.bind(this), console.error); break; case "if": var cpy = inst.slice(0), @@ -88,7 +88,7 @@ html5ks.imachine = new (function () { break el; } } - return html5ks.imachine.run(next).then(runInst); + return html5ks.imachine.run(next).then(runInst, console.error); case "path_end": // TODO: disp vid + add to persistent deferred.resolve(); diff --git a/www/js/menu.js b/www/js/menu.js index c03523e..bf0b52c 100644 --- a/www/js/menu.js +++ b/www/js/menu.js @@ -172,10 +172,10 @@ var start = this.elements.main.start; start.addEventListener("click", function () { this.elements.mainMenu.style.display = "none"; - html5ks.imachine.start().then(this.mainMenu.bind(this)); + html5ks.imachine.start().then(this.mainMenu.bind(this), console.error); }.bind(this), false); start.className = start.className.replace("disabled", ""); - }.bind(this)); + }.bind(this), console.error); }, _state: null, |