diff --git a/index.html b/index.html new file mode 100644 index 0000000..c9b8794 --- /dev/null +++ b/index.html @@ -0,0 +1,76 @@ + + +
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/lib/gladius.js b/lib/gladius.js new file mode 100644 index 0000000..429c35f --- /dev/null +++ b/lib/gladius.js @@ -0,0 +1,112254 @@ +/* +Copyright (c) 2011, Mozilla Foundation +Copyright (c) 2011, Alan Kligman +Copyright (c) 2011, Robert Richter +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + Neither the name of the Mozilla Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +(function () { + + // Bail if there is already a gladius in the page. + if ( this.gladius ) { + return; + } + +/** + * almond 0.0.3 Copyright (c) 2011, The Dojo Foundation All Rights Reserved. + * Available via the MIT or new BSD license. + * see: http://github.com/jrburke/almond for details + */ +/*jslint strict: false, plusplus: false */ +/*global setTimeout: false */ + +var requirejs, require, define; +(function (undef) { + + var defined = {}, + waiting = {}, + aps = [].slice, + main, req; + + if (typeof define === "function") { + //If a define is already in play via another AMD loader, + //do not overwrite. + return; + } + + /** + * Given a relative module name, like ./something, normalize it to + * a real name that can be mapped to a path. + * @param {String} name the relative name + * @param {String} baseName a real name that the name arg is relative + * to. + * @returns {String} normalized name + */ + function normalize(name, baseName) { + //Adjust any relative paths. + if (name && name.charAt(0) === ".") { + //If have a base name, try to normalize against it, + //otherwise, assume it is a top-level require that will + //be relative to baseUrl in the end. + if (baseName) { + //Convert baseName to array, and lop off the last part, + //so that . matches that "directory" and not name of the baseName's + //module. For instance, baseName of "one/two/three", maps to + //"one/two/three.js", but we want the directory, "one/two" for + //this normalization. + baseName = baseName.split("/"); + baseName = baseName.slice(0, baseName.length - 1); + + name = baseName.concat(name.split("/")); + + //start trimDots + var i, part; + for (i = 0; (part = name[i]); i++) { + if (part === ".") { + name.splice(i, 1); + i -= 1; + } else if (part === "..") { + if (i === 1 && (name[2] === '..' || name[0] === '..')) { + //End of the line. Keep at least one non-dot + //path segment at the front so it can be mapped + //correctly to disk. Otherwise, there is likely + //no path mapping for a path starting with '..'. + //This can still fail, but catches the most reasonable + //uses of .. + break; + } else if (i > 0) { + name.splice(i - 1, 2); + i -= 2; + } + } + } + //end trimDots + + name = name.join("/"); + } + } + return name; + } + + function makeRequire(relName, forceSync) { + return function () { + //A version of a require function that passes a moduleName + //value for items that may need to + //look up paths relative to the moduleName + return req.apply(undef, aps.call(arguments, 0).concat([relName, forceSync])); + }; + } + + function makeNormalize(relName) { + return function (name) { + return normalize(name, relName); + }; + } + + function makeLoad(depName) { + return function (value) { + defined[depName] = value; + }; + } + + function callDep(name) { + if (waiting.hasOwnProperty(name)) { + var args = waiting[name]; + delete waiting[name]; + main.apply(undef, args); + } + return defined[name]; + } + + /** + * Makes a name map, normalizing the name, and using a plugin + * for normalization if necessary. Grabs a ref to plugin + * too, as an optimization. + */ + function makeMap(name, relName) { + var prefix, plugin, + index = name.indexOf('!'); + + if (index !== -1) { + prefix = normalize(name.slice(0, index), relName); + name = name.slice(index + 1); + plugin = callDep(prefix); + + //Normalize according + if (plugin && plugin.normalize) { + name = plugin.normalize(name, makeNormalize(relName)); + } else { + name = normalize(name, relName); + } + } else { + name = normalize(name, relName); + } + + //Using ridiculous property names for space reasons + return { + f: prefix ? prefix + '!' + name : name, //fullName + n: name, + p: plugin + }; + } + + main = function (name, deps, callback, relName) { + var args = [], + usingExports, + cjsModule, depName, i, ret, map; + + //Use name if no relName + if (!relName) { + relName = name; + } + + //Call the callback to define the module, if necessary. + if (typeof callback === 'function') { + + //Default to require, exports, module if no deps if + //the factory arg has any arguments specified. + if (!deps.length && callback.length) { + deps = ['require', 'exports', 'module']; + } + + //Pull out the defined dependencies and pass the ordered + //values to the callback. + for (i = 0; i < deps.length; i++) { + map = makeMap(deps[i], relName); + depName = map.f; + + //Fast path CommonJS standard dependencies. + if (depName === "require") { + args[i] = makeRequire(name); + } else if (depName === "exports") { + //CommonJS module spec 1.1 + args[i] = defined[name] = {}; + usingExports = true; + } else if (depName === "module") { + //CommonJS module spec 1.1 + cjsModule = args[i] = { + id: name, + uri: '', + exports: defined[name] + }; + } else if (defined.hasOwnProperty(depName) || waiting.hasOwnProperty(depName)) { + args[i] = callDep(depName); + } else if (map.p) { + map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {}); + args[i] = defined[depName]; + } else { + throw name + ' missing ' + depName; + } + } + + ret = callback.apply(defined[name], args); + + if (name) { + //If setting exports via "module" is in play, + //favor that over return value and exports. After that, + //favor a non-undefined return value over exports use. + if (cjsModule && cjsModule.exports !== undef) { + defined[name] = cjsModule.exports; + } else if (!usingExports) { + //Use the return value from the function. + defined[name] = ret; + } + } + } else if (name) { + //May just be an object definition for the module. Only + //worry about defining if have a module name. + defined[name] = callback; + } + }; + + requirejs = req = function (deps, callback, relName, forceSync) { + if (typeof deps === "string") { + + //Just return the module wanted. In this scenario, the + //deps arg is the module name, and second arg (if passed) + //is just the relName. + //Normalize module name, if it contains . or .. + return callDep(makeMap(deps, callback).f); + } else if (!deps.splice) { + //deps is a config object, not an array. + //Drop the config stuff on the ground. + if (callback.splice) { + //callback is an array, which means it is a dependency list. + //Adjust args if there are dependencies + deps = callback; + callback = arguments[2]; + } else { + deps = []; + } + } + + //Simulate async callback; + if (forceSync) { + main(undef, deps, callback, relName); + } else { + setTimeout(function () { + main(undef, deps, callback, relName); + }, 15); + } + + return req; + }; + + /** + * Just drops the config on the floor, but returns req in case + * the config return value is used. + */ + req.config = function () { + return req; + }; + + /** + * Export require as a global, but only if it does not already exist. + */ + if (!require) { + require = req; + } + + define = function (name, deps, callback) { + + //This module may not have dependencies + if (!deps.splice) { + //deps is not an array, so probably means + //an object literal or factory function for + //the value. Adjust args. + callback = deps; + deps = []; + } + + if (define.unordered) { + waiting[name] = [name, deps, callback]; + } else { + main(name, deps, callback); + } + }; + + define.amd = { + jQuery: true + }; +}()); + +define("../tools/almond", function(){}); + +/*jshint white: false, strict: false, plusplus: false, evil: true, + onevar: false, nomen: false */ +/*global requirejs: false, document: false, console: false, window: false, + setTimeout: false */ + +/** + * In the source case, use document.write to write out the require tag, + * and load all moduels as distinct scripts for debugging. After a build, + * all the modules are inlined, so will not use the document.write path. + * Use has() testing module, since the requirejs optimizer will convert + * the has test to false, and minification will strip the false code + * branch. http://requirejs.org/docs/optimization.html#hasjs + */ +(function () { + // Stub for has function. + function has() { + return true; + } + + if ( false ) { + // Get the location of the gladius source. + // The last script tag should be the gladius source + // tag since in dev, it will be a blocking script tag, + // so latest tag is the one for this script. + var scripts = document.getElementsByTagName( 'script' ), + path = scripts[scripts.length - 1].src; + path = path.split( '/' ); + path.pop(); + path = path.join( '/' ) + '/'; + + document.write( ' + + + + + + + ++ This example shows how to extend Gladius to create animated models + using F1LT3R's Sprite-Viking Bltr + library. +
+ ++ A BitwallModel Component takes images from a sprite sheet and extrudes + them into 3D figures with a layered look. They are animated by + rendering subsequent frames from the sprite sheet on a timer. The animation + runs at a fixed frame rate by consuming available time in fixed quantities. +
+ + +