You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
2.8 KiB
JavaScript
119 lines
2.8 KiB
JavaScript
5 years ago
|
clippy.BASE_PATH = '//s3.amazonaws.com/clippy.js/Agents/';
|
||
|
|
||
|
clippy.load = function (name, successCb, failCb) {
|
||
|
var path = clippy.BASE_PATH + name;
|
||
|
|
||
|
var mapDfd = clippy.load._loadMap(path);
|
||
|
var agentDfd = clippy.load._loadAgent(name, path);
|
||
|
var soundsDfd = clippy.load._loadSounds(name, path);
|
||
|
|
||
|
var data;
|
||
|
agentDfd.done(function (d) {
|
||
|
data = d;
|
||
|
});
|
||
|
|
||
|
var sounds;
|
||
|
|
||
|
soundsDfd.done(function (d) {
|
||
|
sounds = d;
|
||
|
});
|
||
|
|
||
|
// wrapper to the success callback
|
||
|
var cb = function () {
|
||
|
var a = new clippy.Agent(path, data,sounds);
|
||
|
successCb(a);
|
||
|
};
|
||
|
|
||
|
$.when(mapDfd, agentDfd, soundsDfd).done(cb).fail(failCb);
|
||
|
};
|
||
|
|
||
|
clippy.load._maps = {};
|
||
|
clippy.load._loadMap = function (path) {
|
||
|
var dfd = clippy.load._maps[path];
|
||
|
if (dfd) return dfd;
|
||
|
|
||
|
// set dfd if not defined
|
||
|
dfd = clippy.load._maps[path] = $.Deferred();
|
||
|
|
||
|
var src = path + '/map.png';
|
||
|
var img = new Image();
|
||
|
|
||
|
img.onload = dfd.resolve;
|
||
|
img.onerror = dfd.reject;
|
||
|
|
||
|
// start loading the map;
|
||
|
img.setAttribute('src', src);
|
||
|
|
||
|
return dfd.promise();
|
||
|
};
|
||
|
|
||
|
clippy.load._sounds = {};
|
||
|
|
||
|
clippy.load._loadSounds = function (name, path) {
|
||
|
var dfd = clippy.load._sounds[name];
|
||
|
if (dfd) return dfd;
|
||
|
|
||
|
// set dfd if not defined
|
||
|
dfd = clippy.load._sounds[name] = $.Deferred();
|
||
|
|
||
|
var audio = document.createElement('audio');
|
||
|
var canPlayMp3 = !!audio.canPlayType && "" != audio.canPlayType('audio/mpeg');
|
||
|
var canPlayOgg = !!audio.canPlayType && "" != audio.canPlayType('audio/ogg; codecs="vorbis"');
|
||
|
|
||
|
if (!canPlayMp3 && !canPlayOgg) {
|
||
|
dfd.resolve({});
|
||
|
} else {
|
||
|
var src = path + (canPlayMp3 ? '/sounds-mp3.js' : '/sounds-ogg.js');
|
||
|
// load
|
||
|
clippy.load._loadScript(src);
|
||
|
}
|
||
|
|
||
|
return dfd.promise()
|
||
|
};
|
||
|
|
||
|
|
||
|
clippy.load._data = {};
|
||
|
clippy.load._loadAgent = function (name, path) {
|
||
|
var dfd = clippy.load._data[name];
|
||
|
if (dfd) return dfd;
|
||
|
|
||
|
dfd = clippy.load._getAgentDfd(name);
|
||
|
|
||
|
var src = path + '/agent.js';
|
||
|
|
||
|
clippy.load._loadScript(src);
|
||
|
|
||
|
return dfd.promise();
|
||
|
};
|
||
|
|
||
|
clippy.load._loadScript = function (src) {
|
||
|
var script = document.createElement('script');
|
||
|
script.setAttribute('src', src);
|
||
|
script.setAttribute('async', 'async');
|
||
|
script.setAttribute('type', 'text/javascript');
|
||
|
|
||
|
document.head.appendChild(script);
|
||
|
};
|
||
|
|
||
|
clippy.load._getAgentDfd = function (name) {
|
||
|
var dfd = clippy.load._data[name];
|
||
|
if (!dfd) {
|
||
|
dfd = clippy.load._data[name] = $.Deferred();
|
||
|
}
|
||
|
return dfd;
|
||
|
};
|
||
|
|
||
|
clippy.ready = function (name, data) {
|
||
|
var dfd = clippy.load._getAgentDfd(name);
|
||
|
dfd.resolve(data);
|
||
|
};
|
||
|
|
||
|
clippy.soundsReady = function (name, data) {
|
||
|
var dfd = clippy.load._sounds[name];
|
||
|
if (!dfd) {
|
||
|
dfd = clippy.load._sounds[name] = $.Deferred();
|
||
|
}
|
||
|
|
||
|
dfd.resolve(data);
|
||
|
};
|