summaryrefslogtreecommitdiff
path: root/www/js/html5ks.js
diff options
context:
space:
mode:
authorAlex Xu <alex_y_xu@yahoo.ca>2013-06-11 15:56:42 -0400
committerAlex Xu <alex_y_xu@yahoo.ca>2013-06-21 13:23:45 -0400
commit20a1938b033f1f6749c5067e1acac62a0a487944 (patch)
tree33c286d15469532fbdd5f4103f232face03b9ba0 /www/js/html5ks.js
parent600ef134d1a80b5f4e2c724dc3e3d0709c94fa72 (diff)
downloadhtml5ks-20a1938b033f1f6749c5067e1acac62a0a487944.tar.xz
html5ks-20a1938b033f1f6749c5067e1acac62a0a487944.zip
move www to subdirectory - avoid serving conf
Diffstat (limited to 'www/js/html5ks.js')
-rw-r--r--www/js/html5ks.js161
1 files changed, 161 insertions, 0 deletions
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);
+}());