diff options
Diffstat (limited to 'www/js/api.js')
-rw-r--r-- | www/js/api.js | 121 |
1 files changed, 64 insertions, 57 deletions
diff --git a/www/js/api.js b/www/js/api.js index 91a28d7..1cf9fbe 100644 --- a/www/js/api.js +++ b/www/js/api.js @@ -9,55 +9,55 @@ window.html5ks.api = { } } }, - set_volume: function (volume, delay, channel) { + + + set_volume: function (target, delay, channel) { var deferred = when.defer(), audio = html5ks.elements.audio[channel], - chg = volume - audio.volume, - step = chg / (delay * 10); + step = (target - audio.volume) / (delay * 20); var f = setInterval(function () { - var newv = audio.volume + step; - if (newv > 1) { - audio.volume = 1; + // clamp new volume 0-1 + audio.volume = Math.min(Math.max(audio.volume + step, 0), 1); + if (audio.volume === 0 || audio.volume === 1) { clearInterval(f); - } else if (newv < 0) { - audio.volume = 0; - clearInterval(f); - } else { - audio.volume = newv; } - }, 100); + }, 50); deferred.resolve(); return deferred.promise; }, - play: function (channel, name, fade) { + + play: function (channel, name, ignore, fade) { + this.stop(channel); var deferred = when.defer(), - audio = html5ks.elements.audio[channel]; + audio = new Audio(); + if (channel === "music" || channel === "ambient") { + audio.loop = true; + } + html5ks.elements.audio[channel] = audio; audio.src = "dump/" + (channel === "music" ? "bgm/" + html5ks.data.music[name] + ".ogg" : html5ks.data.sfx[name]); audio.load(); audio.volume = fade ? 0 : 1; audio.play(); audio.addEventListener("playing", function playing() { - audio.removeEventListener("playing", playing, false); deferred.resolve(); if (fade) { html5ks.api.set_volume(1, fade, channel); } }, false); audio.addEventListener("error", function error() { - audio.removeEventListener("error", error, false); deferred.reject(this.error); }, false); return deferred.promise; }, - stop: function (channel, fade) { + + stop: function (channel, ignore, fade) { if (channel === "all") { - this.stop("music"); - this.stop("sound"); - return this.stop("ambient"); + this.stop("music", ignore, fade); + this.stop("sound", ignore, fade); + return this.stop("ambient", ignore, fade); } var deferred = when.defer(), - audio = html5ks.elements.audio[channel], - fadeSet = html5ks.persistent.settings.fade; + audio = html5ks.elements.audio[channel]; if (fade) { this.set_volume(0, fade, channel); } else { @@ -67,6 +67,7 @@ window.html5ks.api = { return deferred.promise; }, + movie_cutscene: function (vid_src, skippable) { var deferred = when.defer(), video = html5ks.elements.video, @@ -113,13 +114,16 @@ window.html5ks.api = { }, false); return deferred.promise; }, + act_op: function (this_video) { // strip off extension return this.movie_cutscene(this_video.slice(0,-4)); }, + + iscene: function (target, is_h, is_end) { var deferred = when.defer(), - label = html5ks.data.script[target], + label = html5ks.data.script[html5ks.persistent.settings.language + "_" + target], i = 0; (function run(ret) { if (label[i]) { @@ -132,18 +136,18 @@ window.html5ks.api = { return deferred.promise; }, - with: function (transition, action) { - return this.runInst(action); - }, runInst: function (inst) { - var cmd = inst[0], + var cmd = inst[0].replace(/"/g, ''), args = inst.slice(1); if (html5ks.data.characters[cmd]) { return this.character(cmd, args[0]); } else { if (this[cmd]) { return this[cmd].apply(this, args); + } else if (inst.length === 1) { + console.log("hopefully this is dialogue"); + return this.character("name_only", cmd); } else if (/^[A-Z]/.test(cmd)) { console.log("cmd starts with caps, probably character"); return this.character(cmd, args[0]); @@ -156,6 +160,7 @@ window.html5ks.api = { } }, + window: function (action, transition) { var windw = html5ks.elements.window, deferred = when.defer(); @@ -167,12 +172,14 @@ window.html5ks.api = { deferred.resolve(action); return deferred.promise; }, - // NOT iscene + + scene: function (type, name) { html5ks.elements.show.innerHTML = ""; return this.show.apply(this, arguments); }, + show: function (name, type, location) { var deferred = when.defer(); var lookup = document.getElementById(name), @@ -200,7 +207,7 @@ window.html5ks.api = { bgleft: { xpos: 0.4, xanchor: 0.5, ypos: 1.0, yanchor: 1.0 }, bgright: { xpos: 0.6, xanchor: 0.5, ypos: 1.0, yanchor: 1.0 } }; - var pos = positions[location] || positions["center"]; + var pos = positions[location] || positions.center; // TODO: implement transitions if (pos) { el.style.left = pos.xpos * 800 + "px"; @@ -213,38 +220,37 @@ window.html5ks.api = { deferred.resolve(); }; el.onerror = function () { - // TODO: check if img is really in images.js - deferred.resolve(); + deferred.reject(); }; var nom = name; if (type) { nom = name + "_" + type; } var image = html5ks.data.images[nom]; - if (typeof image == "undefined") { - switch (name) { - case "bg": - image = "bgs/" + type + ".jpg"; - break; - case "url": - name = type; - image = type; - break; - default: - image = "sprites/" + name + "/" + (type && type.indexOf("_close") > -1 ? "close/" : "") + name + "_" + type + ".png"; - } - } - if (typeof image == "string") { - if (image.substring(0,1) == "#") { + switch (typeof image) { + case "string": + el = document.createElement("div"); el.style.backgroundColor = image; el.style.width = "100%"; el.style.height = "100%"; el.src = ""; deferred.resolve(); return deferred.promise; - } else { - image = {image: image}; - } + case "undefined": + switch (name) { + case "bg": + image = "bgs/" + type + ".jpg"; + break; + case "url": + name = type; + image = type; + break; + default: + image = "sprites/" + name + "/" + (type && type.indexOf("_close") > -1 ? "close/" : "") + name + "_" + type + ".png"; + } + } + if (typeof image === "string") { + image = {image: image}; } var src = ""; if (html5ks.persistent.settings.useWebP) { @@ -429,10 +435,10 @@ window.html5ks.api = { menu: function (label) { var deferred = when.defer(), - menu = html5ks.data.script[label], - char = menu[1], - str = menu[2], - choices = menu[3]; + imenu = html5ks.data.script[label], + char = imenu[1], + str = imenu[2], + choices = imenu[3]; this.character(char, str, null, true); var menu = html5ks.elements.choices, frag = document.createDocumentFragment(), @@ -442,14 +448,15 @@ window.html5ks.api = { for (var i in choices) { choice.innerHTML = i; - choice.addEventListener("click", function () { - html5ks.elements.choices.innerHTML = ""; - deferred.resolve(choices[this.innerHTML]); - }, false); frag.appendChild(choice); choice = choice.cloneNode(false); } + menu.addEventListener("click", function (e) { + html5ks.elements.choices.innerHTML = ""; + deferred.resolve(choices[e.target.innerHTML]); + }, false); + html5ks.elements.choices.appendChild(frag); return deferred.promise; } |