From 20a1938b033f1f6749c5067e1acac62a0a487944 Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Tue, 11 Jun 2013 15:56:42 -0400 Subject: move www to subdirectory - avoid serving conf --- www/js/html5ks.js | 161 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 www/js/html5ks.js (limited to 'www/js/html5ks.js') diff --git a/www/js/html5ks.js b/www/js/html5ks.js new file mode 100644 index 0000000..2377eba --- /dev/null +++ b/www/js/html5ks.js @@ -0,0 +1,161 @@ +(function () { +"use strict"; +window.html5ks = { + STUB: function (fn) { + return console.log("STUB: " + fn); + }, + WARN: function (msg) { + return console.log("WARN: " + msg); + }, + persistent: { + seen_scenes: {}, + attraction: { + kenji: 0, + sc: 0, + hanako: 0 + }, + hdisabled: false + }, + save: function () { + localStorage.persistent = JSON.stringify(this.persistent); + }, + load: function () { + if (localStorage.persistent) this.persistent = JSON.parse(localStorage.persistent); + }, + elements: { + container: document.getElementById("container"), + video: document.getElementById("video"), + audio: { + music: document.getElementById("music"), + ambient: document.getElementById("ambient"), + sound: document.getElementById("sound") + }, + say: document.getElementById("say") + }, + seen_scene: function (scene) { + return !!this.persistent.seen_scenes[scene]; + }, + scene_register: function (scene) { + this.persistent.seen_scenes.scene = true; + }, + play: function (channel, name, fade) { + if (fade) this.WARN("fade not implemented"); + var deferred = when.defer(), + audio = this.elements.audio[channel]; + audio.src = "/dump/" + (channel === "music" ? "bgm/" + this.music[name] + ".ogg" : this.sfx[name]); + audio.load(); + audio.play(); + if (channel !== "music") { + audio.addEventListener("ended", function () { + deferred.resolve(this); + }, false); + } else { + audio.addEventListener("playing", function () { + deferred.resolve(this); + }, false); + } + audio.addEventListener("error", function () { + deferred.reject(this.error); + }, false); + return deferred.promise; + }, + play_video: function (vid_src) { + var deferred = when.defer(), + video = this.elements.video; + video.src = "/dump/video/" + vid_src + ".webm"; + video.load(); + video.play(); + video.addEventListener("ended", function () { + deferred.resolve(this); + }, false); + video.addEventListener("error", function () { + deferred.reject(this.error); + }, false); + return deferred.promise; + }, + act_op: function (this_video) { + // strip off extension + return this.play_video(this_video.slice(0,-4)); + }, + iscene: function (target, is_h, is_end) { + this.scene_register(target); + return window.script[target](); + }, + window: function (action, transition) { + var deferred = when.defer(); + setTimeout(function () { + deferred.resolve(action); + }, 100); + return deferred.promise; + }, + sceneTypes: { + "ev": "event", + "evh": "event", + "ovl": "event", + "bg": "bgs", + "": "vfx" + }, + // NOT iscene + scene: function (type, name) { + var deferred = when.defer(); + if (typeof name == "undefined") name = type; + var bg = document.getElementById("bg"); + if (name == "black") { + bg.src = ""; + bg.style.background = "black"; + deferred.resolve(this); + return deferred.promise; + } + this.WARN("don't know extension, trying all"); + var img = "/dump/" + this.sceneTypes[type] + "/" + name; + bg.onerror = function () { + bg.onerror = function () { + bg.onerror = function () { + deferred.reject(this.error); + }; + bg.src = img + ".jpg"; + }; + bg.src = img + ".png"; + }; + bg.onload = function () { + deferred.resolve(this); + }; + bg.src = img + ".webp"; + return deferred.promise; + }, + scale: function () { + var newScale = 1, + height = document.documentElement.clientHeight, + width = document.documentElement.clientWidth; + if (height / width <= 0.75) { // widescreen + newScale = height / 600; + } else { + newScale = width / 800; + } + this.elements.container.style.transform = "scale(" + newScale + ")"; + }, + loadChars: function () { + for (var character in this.characters) { + this[character] = function (text) { + var deferred = when.defer(); + this.elements.say.textContent = text; + setTimeout(function () { + deferred.resolve(text); + }, 1000); + return deferred.promise; + }; + }; + }, + onload: function () { + this.load(); + this.scale(); + window.addEventListener("resize", function () { + html5ks.scale(); + }, false); + this.loadChars(); + } +}; +document.addEventListener("DOMContentLoaded", function () { + html5ks.onload(); +}, false); +}()); -- cgit v1.2.3-54-g00ecf