Skip to content

Instantly share code, notes, and snippets.

@sethvincent
Created September 4, 2013 23:48
Show Gist options
  • Save sethvincent/6444314 to your computer and use it in GitHub Desktop.
Save sethvincent/6444314 to your computer and use it in GitHub Desktop.
requirebin sketch
var Game = require('crtrdg-gameloop');
var Player = require('crtrdg-player');
var Keyboard = require('crtrdg-keyboard');
var canvas = document.createElement('canvas');
canvas.id = 'game';
document.body.appendChild(canvas);
var game = new Game({
canvasId: 'game',
width: window.innerWidth,
height: window.innerHeight,
backgroundColor: '#E187B8'
});
var keyboard = new Keyboard(game);
var player = new Player(game);
// create instance of Player
var player = new Player({
position: { x: 10, y: 10 },
size: { x: 10, y: 10 },
color: '#fff'
});
// add the player to the game
player.addTo(game);
// listen for update event.
// here you can do things like change position or watch for keyboard/mouse events
player.on('update', function(interval){
this.keyboardInput(keyboard);
this.move();
this.checkBoundaries();
});
// listen for draw event.
// context is the canvas context, so you can draw on the canvas like usual.
player.on('draw', function(context){
context.fillStyle = this.color;
context.fillRect(this.position.x, this.position.y, this.size.x, this.size.y);
});
require=function(t,e,n){function r(n,s){if(!e[n]){if(!t[n]){var o="function"==typeof require&&require;if(!s&&o)return o(n,!0);if(i)return i(n,!0);throw Error("Cannot find module '"+n+"'")}var a=e[n]={exports:{}};t[n][0].call(a.exports,function(e){var i=t[n][1][e];return r(i?i:e)},a,a.exports)}return e[n].exports}for(var i="function"==typeof require&&require,s=0;n.length>s;s++)r(n[s]);return r}({1:[function(t,e){var n=e.exports={};n.nextTick=function(){var t="undefined"!=typeof window&&window.setImmediate,e="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(t)return function(t){return window.setImmediate(t)};if(e){var n=[];return window.addEventListener("message",function(t){if(t.source===window&&"process-tick"===t.data&&(t.stopPropagation(),n.length>0)){var e=n.shift();e()}},!0),function(t){n.push(t),window.postMessage("process-tick","*")}}return function(t){setTimeout(t,0)}}(),n.title="browser",n.browser=!0,n.env={},n.argv=[],n.binding=function(){throw Error("process.binding is not supported")},n.cwd=function(){return"/"},n.chdir=function(){throw Error("process.chdir is not supported")}},{}],2:[function(t,e,n){(function(t){function e(t,e){if(t.indexOf)return t.indexOf(e);for(var n=0;t.length>n;n++)if(e===t[n])return n;return-1}t.EventEmitter||(t.EventEmitter=function(){});var r=n.EventEmitter=t.EventEmitter,i="function"==typeof Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},s=10;r.prototype.setMaxListeners=function(t){this._events||(this._events={}),this._events.maxListeners=t},r.prototype.emit=function(t){if("error"===t&&(!this._events||!this._events.error||i(this._events.error)&&!this._events.error.length))throw arguments[1]instanceof Error?arguments[1]:Error("Uncaught, unspecified 'error' event.");if(!this._events)return!1;var e=this._events[t];if(!e)return!1;if("function"==typeof e){switch(arguments.length){case 1:e.call(this);break;case 2:e.call(this,arguments[1]);break;case 3:e.call(this,arguments[1],arguments[2]);break;default:var n=Array.prototype.slice.call(arguments,1);e.apply(this,n)}return!0}if(i(e)){for(var n=Array.prototype.slice.call(arguments,1),r=e.slice(),s=0,o=r.length;o>s;s++)r[s].apply(this,n);return!0}return!1},r.prototype.addListener=function(t,e){if("function"!=typeof e)throw Error("addListener only takes instances of Function");if(this._events||(this._events={}),this.emit("newListener",t,e),this._events[t])if(i(this._events[t])){if(!this._events[t].warned){var n;n=void 0!==this._events.maxListeners?this._events.maxListeners:s,n&&n>0&&this._events[t].length>n&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),console.trace())}this._events[t].push(e)}else this._events[t]=[this._events[t],e];else this._events[t]=e;return this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(t,e){var n=this;return n.on(t,function r(){n.removeListener(t,r),e.apply(this,arguments)}),this},r.prototype.removeListener=function(t,n){if("function"!=typeof n)throw Error("removeListener only takes instances of Function");if(!this._events||!this._events[t])return this;var r=this._events[t];if(i(r)){var s=e(r,n);if(0>s)return this;r.splice(s,1),0==r.length&&delete this._events[t]}else this._events[t]===n&&delete this._events[t];return this},r.prototype.removeAllListeners=function(t){return 0===arguments.length?(this._events={},this):(t&&this._events&&this._events[t]&&(this._events[t]=null),this)},r.prototype.listeners=function(t){return this._events||(this._events={}),this._events[t]||(this._events[t]=[]),i(this._events[t])||(this._events[t]=[this._events[t]]),this._events[t]}})(t("__browserify_process"))},{__browserify_process:1}],"crtrdg-gameloop":[function(t,e){e.exports=t("4i6ABW")},{}],"4i6ABW":[function(t,e){function n(t){this.canvas=document.getElementById(t.canvasId),this.context=this.canvas.getContext("2d"),this.width=this.canvas.width=t.width,this.height=this.canvas.height=t.height,this.backgroundColor=t.backgroundColor,t.maxListeners?this.setMaxListeners(t.maxListeners):this.setMaxListeners(0),this.loop()}var r=t("events").EventEmitter,i=t("raf"),s=t("inherits");e.exports=n,s(n,r),n.prototype.loop=function(){var t=this;this.ticker=i(this.canvas),this.ticker.on("data",function(e){t.update(e),t.draw()})},n.prototype.pause=function(){this.ticker.pause(),this.emit("pause")},n.prototype.resume=function(){var t=this;this.ticker=i(this.canvas),this.ticker.on("data",function(e){t.update(e),t.draw()}),this.emit("resume")},n.prototype.update=function(t){this.currentScene&&this.sceneManager.update(t),this.emit("update",t)},n.prototype.draw=function(){this.currentScene?(this.context.fillStyle=this.currentScene.backgroundColor,this.sceneManager.draw(this.context)):this.context.fillStyle=this.backgroundColor,this.context.fillRect(0,0,this.width,this.height),this.emit("draw",this.context)}},{events:2,raf:3,inherits:4}],4:[function(t,e){e.exports="function"==typeof Object.create?function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:function(t,e){t.super_=e;var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}},{}],3:[function(t,e){(function(){function n(t){function e(){var r=n.now(),a=r-i;i=r,s.emit("data",a),s.paused||o(e,t)}var i=n.now(),s=new r;return s.pause=function(){s.paused=!0},s.resume=function(){s.paused=!1},o(e,t),s}e.exports=n;var r=t("events").EventEmitter,i="undefined"==typeof window?this:window,s=i.performance&&i.performance.now?function(){return performance.now()}:Date.now||function(){return+new Date},o=i.requestAnimationFrame||i.webkitRequestAnimationFrame||i.mozRequestAnimationFrame||i.msRequestAnimationFrame||i.oRequestAnimationFrame||(i.setImmediate?function(t){setImmediate(t)}:function(t){setTimeout(t,0)});n.polyfill=o,n.now=s})()},{events:2}]},{},[]),require=function(t,e,n){function r(n,s){if(!e[n]){if(!t[n]){var o="function"==typeof require&&require;if(!s&&o)return o(n,!0);if(i)return i(n,!0);throw Error("Cannot find module '"+n+"'")}var a=e[n]={exports:{}};t[n][0].call(a.exports,function(e){var i=t[n][1][e];return r(i?i:e)},a,a.exports)}return e[n].exports}for(var i="function"==typeof require&&require,s=0;n.length>s;s++)r(n[s]);return r}({"crtrdg-player":[function(t,e){e.exports=t("7UoXkr")},{}],"7UoXkr":[function(t,e){function n(t){this.position={x:t.position?t.position.x:20,y:t.position?t.position.y:20},this.size={x:t.size?t.size.x:10,y:t.size?t.size.y:10},this.velocity={x:t.velocity?t.size.x:0,y:t.velocity?t.size.y:0},this.speed=t.speed||8,this.friction=t.friction||.9,this.color=t.color||"#666"}var r=t("inherits"),i=t("crtrdg-entity");e.exports=n,r(n,i),n.prototype.move=function(){this.position.x+=this.velocity.x,this.position.y+=this.velocity.y,this.velocity.x*=this.friction,this.velocity.y*=this.friction},n.prototype.checkBoundaries=function(){0>=this.position.x&&(this.position.x=0),this.position.x>=this.game.width-this.size.x&&(this.position.x=this.game.width-this.size.x),0>=this.position.y&&(this.position.y=0),this.position.y>=this.game.height-this.size.y&&(this.position.y=this.game.height-this.size.y)},n.prototype.keyboardInput=function(t){("A"in t.keysDown||"<left>"in t.keysDown)&&(this.velocity.x=-this.speed),("D"in t.keysDown||"<right>"in t.keysDown)&&(this.velocity.x=this.speed),("W"in t.keysDown||"<up>"in t.keysDown)&&(this.velocity.y=-this.speed),("S"in t.keysDown||"<down>"in t.keysDown)&&(this.velocity.y=this.speed)}},{inherits:1,"crtrdg-entity":2}],1:[function(t,e){e.exports="function"==typeof Object.create?function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:function(t,e){t.super_=e;var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}},{}],3:[function(t,e){var n=e.exports={};n.nextTick=function(){var t="undefined"!=typeof window&&window.setImmediate,e="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(t)return function(t){return window.setImmediate(t)};if(e){var n=[];return window.addEventListener("message",function(t){if(t.source===window&&"process-tick"===t.data&&(t.stopPropagation(),n.length>0)){var e=n.shift();e()}},!0),function(t){n.push(t),window.postMessage("process-tick","*")}}return function(t){setTimeout(t,0)}}(),n.title="browser",n.browser=!0,n.env={},n.argv=[],n.binding=function(){throw Error("process.binding is not supported")},n.cwd=function(){return"/"},n.chdir=function(){throw Error("process.chdir is not supported")}},{}],4:[function(t,e,n){(function(t){function e(t,e){if(t.indexOf)return t.indexOf(e);for(var n=0;t.length>n;n++)if(e===t[n])return n;return-1}t.EventEmitter||(t.EventEmitter=function(){});var r=n.EventEmitter=t.EventEmitter,i="function"==typeof Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},s=10;r.prototype.setMaxListeners=function(t){this._events||(this._events={}),this._events.maxListeners=t},r.prototype.emit=function(t){if("error"===t&&(!this._events||!this._events.error||i(this._events.error)&&!this._events.error.length))throw arguments[1]instanceof Error?arguments[1]:Error("Uncaught, unspecified 'error' event.");if(!this._events)return!1;var e=this._events[t];if(!e)return!1;if("function"==typeof e){switch(arguments.length){case 1:e.call(this);break;case 2:e.call(this,arguments[1]);break;case 3:e.call(this,arguments[1],arguments[2]);break;default:var n=Array.prototype.slice.call(arguments,1);e.apply(this,n)}return!0}if(i(e)){for(var n=Array.prototype.slice.call(arguments,1),r=e.slice(),s=0,o=r.length;o>s;s++)r[s].apply(this,n);return!0}return!1},r.prototype.addListener=function(t,e){if("function"!=typeof e)throw Error("addListener only takes instances of Function");if(this._events||(this._events={}),this.emit("newListener",t,e),this._events[t])if(i(this._events[t])){if(!this._events[t].warned){var n;n=void 0!==this._events.maxListeners?this._events.maxListeners:s,n&&n>0&&this._events[t].length>n&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),console.trace())}this._events[t].push(e)}else this._events[t]=[this._events[t],e];else this._events[t]=e;return this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(t,e){var n=this;return n.on(t,function r(){n.removeListener(t,r),e.apply(this,arguments)}),this},r.prototype.removeListener=function(t,n){if("function"!=typeof n)throw Error("removeListener only takes instances of Function");if(!this._events||!this._events[t])return this;var r=this._events[t];if(i(r)){var s=e(r,n);if(0>s)return this;r.splice(s,1),0==r.length&&delete this._events[t]}else this._events[t]===n&&delete this._events[t];return this},r.prototype.removeAllListeners=function(t){return 0===arguments.length?(this._events={},this):(t&&this._events&&this._events[t]&&(this._events[t]=null),this)},r.prototype.listeners=function(t){return this._events||(this._events={}),this._events[t]||(this._events[t]=[]),i(this._events[t])||(this._events[t]=[this._events[t]]),this._events[t]}})(t("__browserify_process"))},{__browserify_process:3}],2:[function(t,e){function n(){return this}var r=t("events").EventEmitter,i=t("inherits"),s=t("aabb-2d");e.exports=n,i(n,r),n.prototype.addTo=function(t){return this.game=t||{},this.game.entities||(this.game.entities=[]),this.game.entities.push(this),this.game.findEntity=this.findEntity,this.initializeListeners(),this.setBoundingBox(),this.on("update",function(){this.setBoundingBox()}),this.exists=!0,this},n.prototype.initializeListeners=function(){var t=this;this.findEntity(this,function(e){e&&(t.game.on("update",function(e){t.emit("update",e)}),t.game.on("draw",function(e){t.emit("draw",e)}))})},n.prototype.remove=function(){this.exists=!1,this.removeAllListeners("update"),this.removeAllListeners("draw"),this.findEntity(this,function(t,e,n){t&&e.splice(n,1)})},n.prototype.findEntity=function(t,e){var n;n=void 0===this.game?this.entities:this.game.entities;for(var r=0;n.length>r;r++)n[r]===t&&e(!0,n,r)},n.prototype.touches=function(t){return t.exists?this.boundingBox.intersects(t.boundingBox):!1},n.prototype.setBoundingBox=function(){this.boundingBox=s([this.position.x,this.position.y],[this.size.x,this.size.y])}},{events:4,"aabb-2d":5,inherits:1}],5:[function(t,e){function n(t,e){return this instanceof n?(this.base=t,this.vec=e,this.mag=r.length(this.vec),this.max=r.create(),r.add(this.max,this.base,this.vec),void 0):new n(t,e)}e.exports=n;var r=t("gl-matrix").vec2,i=n,s=i.prototype;s.perimeter=function(){return 2*(this.vec[0]+this.vec[1])},s.area=function(){return this.vec[0]*this.vec[0]+this.vec[1]*this.vec[1]},s.intperimeter=function(){return this.vec[0]+this.vec[1]<<1},s.width=function(){return this.vec[0]},s.height=function(){return this.vec[1]},s.x0=function(){return this.base[0]},s.y0=function(){return this.base[1]},s.x1=function(){return this.max[0]},s.y1=function(){return this.max[1]},s.translate=function(t){return r.add(this.max,this.max,t),r.add(this.base,this.base,t),this},s.expand=function(t){var e=r.create(),i=r.create();return r.max(e,t.max,this.max),r.min(i,t.base,this.base),r.sub(e,e,i),new n(i,e)},s.intersects=function(t){return t.base[0]>this.max[0]?!1:t.base[1]>this.max[1]?!1:t.max[0]<this.base[0]?!1:t.max[1]<this.base[1]?!1:!0},s.union=function(t){if(!this.intersects(t))return null;var e=Math.max(t.base[0],this.base[0]),r=Math.max(t.base[1],this.base[1]),i=Math.min(t.max[0],this.max[0]),s=Math.min(t.max[1],this.max[1]);return new n([e,r],[i-e,s-r])}},{"gl-matrix":6}],6:[function(t,e,n){(function(){(function(){"use strict";var t={};n===void 0?"function"==typeof define&&"object"==typeof define.amd&&define.amd?(t.exports={},define(function(){return t.exports})):t.exports=window:t.exports=n,function(t){var e={};if(!n)var n=1e-6;e.create=function(){return new Float32Array(2)},e.clone=function(t){var e=new Float32Array(2);return e[0]=t[0],e[1]=t[1],e},e.fromValues=function(t,e){var n=new Float32Array(2);return n[0]=t,n[1]=e,n},e.copy=function(t,e){return t[0]=e[0],t[1]=e[1],t},e.set=function(t,e,n){return t[0]=e,t[1]=n,t},e.add=function(t,e,n){return t[0]=e[0]+n[0],t[1]=e[1]+n[1],t},e.sub=e.subtract=function(t,e,n){return t[0]=e[0]-n[0],t[1]=e[1]-n[1],t},e.mul=e.multiply=function(t,e,n){return t[0]=e[0]*n[0],t[1]=e[1]*n[1],t},e.div=e.divide=function(t,e,n){return t[0]=e[0]/n[0],t[1]=e[1]/n[1],t},e.min=function(t,e,n){return t[0]=Math.min(e[0],n[0]),t[1]=Math.min(e[1],n[1]),t},e.max=function(t,e,n){return t[0]=Math.max(e[0],n[0]),t[1]=Math.max(e[1],n[1]),t},e.scale=function(t,e,n){return t[0]=e[0]*n,t[1]=e[1]*n,t},e.dist=e.distance=function(t,e){var n=e[0]-t[0],r=e[1]-t[1];return Math.sqrt(n*n+r*r)},e.sqrDist=e.squaredDistance=function(t,e){var n=e[0]-t[0],r=e[1]-t[1];return n*n+r*r},e.len=e.length=function(t){var e=t[0],n=t[1];return Math.sqrt(e*e+n*n)},e.sqrLen=e.squaredLength=function(t){var e=t[0],n=t[1];return e*e+n*n},e.negate=function(t,e){return t[0]=-e[0],t[1]=-e[1],t},e.normalize=function(t,e){var n=e[0],r=e[1],i=n*n+r*r;return i>0&&(i=1/Math.sqrt(i),t[0]=e[0]*i,t[1]=e[1]*i),t},e.dot=function(t,e){return t[0]*e[0]+t[1]*e[1]},e.cross=function(t,e,n){var r=e[0]*n[1]-e[1]*n[0];return t[0]=t[1]=0,t[2]=r,t},e.lerp=function(t,e,n,r){var i=e[0],s=e[1];return t[0]=i+r*(n[0]-i),t[1]=s+r*(n[1]-s),t},e.transformMat2=function(t,e,n){var r=e[0],i=e[1];return t[0]=r*n[0]+i*n[1],t[1]=r*n[2]+i*n[3],t},e.forEach=function(){var t=new Float32Array(2);return function(e,n,r,i,s,o){var a,u;for(n||(n=2),r||(r=0),u=i?Math.min(i*n+r,e.length):e.length,a=r;u>a;a+=n)t[0]=e[a],t[1]=e[a+1],s(t,t,o),e[a]=t[0],e[a+1]=t[1];return e}}(),e.str=function(t){return"vec2("+t[0]+", "+t[1]+")"},t!==void 0&&(t.vec2=e);var r={};if(!n)var n=1e-6;r.create=function(){return new Float32Array(3)},r.clone=function(t){var e=new Float32Array(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e},r.fromValues=function(t,e,n){var r=new Float32Array(3);return r[0]=t,r[1]=e,r[2]=n,r},r.copy=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t},r.set=function(t,e,n,r){return t[0]=e,t[1]=n,t[2]=r,t},r.add=function(t,e,n){return t[0]=e[0]+n[0],t[1]=e[1]+n[1],t[2]=e[2]+n[2],t},r.sub=r.subtract=function(t,e,n){return t[0]=e[0]-n[0],t[1]=e[1]-n[1],t[2]=e[2]-n[2],t},r.mul=r.multiply=function(t,e,n){return t[0]=e[0]*n[0],t[1]=e[1]*n[1],t[2]=e[2]*n[2],t},r.div=r.divide=function(t,e,n){return t[0]=e[0]/n[0],t[1]=e[1]/n[1],t[2]=e[2]/n[2],t},r.min=function(t,e,n){return t[0]=Math.min(e[0],n[0]),t[1]=Math.min(e[1],n[1]),t[2]=Math.min(e[2],n[2]),t},r.max=function(t,e,n){return t[0]=Math.max(e[0],n[0]),t[1]=Math.max(e[1],n[1]),t[2]=Math.max(e[2],n[2]),t},r.scale=function(t,e,n){return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t},r.dist=r.distance=function(t,e){var n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(n*n+r*r+i*i)},r.sqrDist=r.squaredDistance=function(t,e){var n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return n*n+r*r+i*i},r.len=r.length=function(t){var e=t[0],n=t[1],r=t[2];return Math.sqrt(e*e+n*n+r*r)},r.sqrLen=r.squaredLength=function(t){var e=t[0],n=t[1],r=t[2];return e*e+n*n+r*r},r.negate=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t},r.normalize=function(t,e){var n=e[0],r=e[1],i=e[2],s=n*n+r*r+i*i;return s>0&&(s=1/Math.sqrt(s),t[0]=e[0]*s,t[1]=e[1]*s,t[2]=e[2]*s),t},r.dot=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]},r.cross=function(t,e,n){var r=e[0],i=e[1],s=e[2],o=n[0],a=n[1],u=n[2];return t[0]=i*u-s*a,t[1]=s*o-r*u,t[2]=r*a-i*o,t},r.lerp=function(t,e,n,r){var i=e[0],s=e[1],o=e[2];return t[0]=i+r*(n[0]-i),t[1]=s+r*(n[1]-s),t[2]=o+r*(n[2]-o),t},r.transformMat4=function(t,e,n){var r=e[0],i=e[1],s=e[2];return t[0]=n[0]*r+n[4]*i+n[8]*s+n[12],t[1]=n[1]*r+n[5]*i+n[9]*s+n[13],t[2]=n[2]*r+n[6]*i+n[10]*s+n[14],t},r.transformQuat=function(t,e,n){var r=e[0],i=e[1],s=e[2],o=n[0],a=n[1],u=n[2],c=n[3],h=c*r+a*s-u*i,f=c*i+u*r-o*s,v=c*s+o*i-a*r,p=-o*r-a*i-u*s;return t[0]=h*c+p*-o+f*-u-v*-a,t[1]=f*c+p*-a+v*-o-h*-u,t[2]=v*c+p*-u+h*-a-f*-o,t},r.forEach=function(){var t=new Float32Array(3);return function(e,n,r,i,s,o){var a,u;for(n||(n=3),r||(r=0),u=i?Math.min(i*n+r,e.length):e.length,a=r;u>a;a+=n)t[0]=e[a],t[1]=e[a+1],t[2]=e[a+2],s(t,t,o),e[a]=t[0],e[a+1]=t[1],e[a+2]=t[2];return e}}(),r.str=function(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"},t!==void 0&&(t.vec3=r);var i={};if(!n)var n=1e-6;i.create=function(){return new Float32Array(4)},i.clone=function(t){var e=new Float32Array(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e},i.fromValues=function(t,e,n,r){var i=new Float32Array(4);return i[0]=t,i[1]=e,i[2]=n,i[3]=r,i},i.copy=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t},i.set=function(t,e,n,r,i){return t[0]=e,t[1]=n,t[2]=r,t[3]=i,t},i.add=function(t,e,n){return t[0]=e[0]+n[0],t[1]=e[1]+n[1],t[2]=e[2]+n[2],t[3]=e[3]+n[3],t},i.sub=i.subtract=function(t,e,n){return t[0]=e[0]-n[0],t[1]=e[1]-n[1],t[2]=e[2]-n[2],t[3]=e[3]-n[3],t},i.mul=i.multiply=function(t,e,n){return t[0]=e[0]*n[0],t[1]=e[1]*n[1],t[2]=e[2]*n[2],t[3]=e[3]*n[3],t},i.div=i.divide=function(t,e,n){return t[0]=e[0]/n[0],t[1]=e[1]/n[1],t[2]=e[2]/n[2],t[3]=e[3]/n[3],t},i.min=function(t,e,n){return t[0]=Math.min(e[0],n[0]),t[1]=Math.min(e[1],n[1]),t[2]=Math.min(e[2],n[2]),t[3]=Math.min(e[3],n[3]),t},i.max=function(t,e,n){return t[0]=Math.max(e[0],n[0]),t[1]=Math.max(e[1],n[1]),t[2]=Math.max(e[2],n[2]),t[3]=Math.max(e[3],n[3]),t},i.scale=function(t,e,n){return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t},i.dist=i.distance=function(t,e){var n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2],s=e[3]-t[3];return Math.sqrt(n*n+r*r+i*i+s*s)},i.sqrDist=i.squaredDistance=function(t,e){var n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2],s=e[3]-t[3];return n*n+r*r+i*i+s*s},i.len=i.length=function(t){var e=t[0],n=t[1],r=t[2],i=t[3];return Math.sqrt(e*e+n*n+r*r+i*i)},i.sqrLen=i.squaredLength=function(t){var e=t[0],n=t[1],r=t[2],i=t[3];return e*e+n*n+r*r+i*i},i.negate=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t},i.normalize=function(t,e){var n=e[0],r=e[1],i=e[2],s=e[3],o=n*n+r*r+i*i+s*s;return o>0&&(o=1/Math.sqrt(o),t[0]=e[0]*o,t[1]=e[1]*o,t[2]=e[2]*o,t[3]=e[3]*o),t},i.dot=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]},i.lerp=function(t,e,n,r){var i=e[0],s=e[1],o=e[2],a=e[3];return t[0]=i+r*(n[0]-i),t[1]=s+r*(n[1]-s),t[2]=o+r*(n[2]-o),t[3]=a+r*(n[3]-a),t},i.transformMat4=function(t,e,n){var r=e[0],i=e[1],s=e[2],o=e[3];return t[0]=n[0]*r+n[4]*i+n[8]*s+n[12]*o,t[1]=n[1]*r+n[5]*i+n[9]*s+n[13]*o,t[2]=n[2]*r+n[6]*i+n[10]*s+n[14]*o,t[3]=n[3]*r+n[7]*i+n[11]*s+n[15]*o,t},i.transformQuat=function(t,e,n){var r=e[0],i=e[1],s=e[2],o=n[0],a=n[1],u=n[2],c=n[3],h=c*r+a*s-u*i,f=c*i+u*r-o*s,v=c*s+o*i-a*r,p=-o*r-a*i-u*s;return t[0]=h*c+p*-o+f*-u-v*-a,t[1]=f*c+p*-a+v*-o-h*-u,t[2]=v*c+p*-u+h*-a-f*-o,t},i.forEach=function(){var t=new Float32Array(4);return function(e,n,r,i,s,o){var a,u;for(n||(n=4),r||(r=0),u=i?Math.min(i*n+r,e.length):e.length,a=r;u>a;a+=n)t[0]=e[a],t[1]=e[a+1],t[2]=e[a+2],t[3]=e[a+3],s(t,t,o),e[a]=t[0],e[a+1]=t[1],e[a+2]=t[2],e[a+3]=t[3];return e}}(),i.str=function(t){return"vec4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},t!==void 0&&(t.vec4=i);var s={},o=new Float32Array([1,0,0,1]);if(!n)var n=1e-6;s.create=function(){return new Float32Array(o)},s.clone=function(t){var e=new Float32Array(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e},s.copy=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t},s.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t},s.transpose=function(t,e){if(t===e){var n=e[1];t[1]=e[2],t[2]=n}else t[0]=e[0],t[1]=e[2],t[2]=e[1],t[3]=e[3];return t},s.invert=function(t,e){var n=e[0],r=e[1],i=e[2],s=e[3],o=n*s-i*r;return o?(o=1/o,t[0]=s*o,t[1]=-r*o,t[2]=-i*o,t[3]=n*o,t):null},s.adjoint=function(t,e){var n=e[0];return t[0]=e[3],t[1]=-e[1],t[2]=-e[2],t[3]=n,t},s.determinant=function(t){return t[0]*t[3]-t[2]*t[1]},s.mul=s.multiply=function(t,e,n){var r=e[0],i=e[1],s=e[2],o=e[3],a=n[0],u=n[1],c=n[2],h=n[3];return t[0]=r*a+i*c,t[1]=r*u+i*h,t[2]=s*a+o*c,t[3]=s*u+o*h,t},s.rotate=function(t,e,n){var r=e[0],i=e[1],s=e[2],o=e[3],a=Math.sin(n),u=Math.cos(n);return t[0]=r*u+i*a,t[1]=r*-a+i*u,t[2]=s*u+o*a,t[3]=s*-a+o*u,t},s.scale=function(t,e,n){var r=e[0],i=e[1],s=e[2],o=e[3],a=n[0],u=n[1];return t[0]=r*a,t[1]=i*u,t[2]=s*a,t[3]=o*u,t},s.str=function(t){return"mat2("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},t!==void 0&&(t.mat2=s);var a={},u=new Float32Array([1,0,0,0,1,0,0,0,1]);if(!n)var n=1e-6;a.create=function(){return new Float32Array(u)},a.clone=function(t){var e=new Float32Array(9);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e},a.copy=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t},a.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},a.transpose=function(t,e){if(t===e){var n=e[1],r=e[2],i=e[5];t[1]=e[3],t[2]=e[6],t[3]=n,t[5]=e[7],t[6]=r,t[7]=i}else t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8];return t},a.invert=function(t,e){var n=e[0],r=e[1],i=e[2],s=e[3],o=e[4],a=e[5],u=e[6],c=e[7],h=e[8],f=h*o-a*c,v=-h*s+a*u,p=c*s-o*u,l=n*f+r*v+i*p;return l?(l=1/l,t[0]=f*l,t[1]=(-h*r+i*c)*l,t[2]=(a*r-i*o)*l,t[3]=v*l,t[4]=(h*n-i*u)*l,t[5]=(-a*n+i*s)*l,t[6]=p*l,t[7]=(-c*n+r*u)*l,t[8]=(o*n-r*s)*l,t):null},a.adjoint=function(t,e){var n=e[0],r=e[1],i=e[2],s=e[3],o=e[4],a=e[5],u=e[6],c=e[7],h=e[8];return t[0]=o*h-a*c,t[1]=i*c-r*h,t[2]=r*a-i*o,t[3]=a*u-s*h,t[4]=n*h-i*u,t[5]=i*s-n*a,t[6]=s*c-o*u,t[7]=r*u-n*c,t[8]=n*o-r*s,t},a.determinant=function(t){var e=t[0],n=t[1],r=t[2],i=t[3],s=t[4],o=t[5],a=t[6],u=t[7],c=t[8];return e*(c*s-o*u)+n*(-c*i+o*a)+r*(u*i-s*a)},a.mul=a.multiply=function(t,e,n){var r=e[0],i=e[1],s=e[2],o=e[3],a=e[4],u=e[5],c=e[6],h=e[7],f=e[8],v=n[0],p=n[1],l=n[2],d=n[3],m=n[4],y=n[5],w=n[6],g=n[7],_=n[8];return t[0]=v*r+p*o+l*c,t[1]=v*i+p*a+l*h,t[2]=v*s+p*u+l*f,t[3]=d*r+m*o+y*c,t[4]=d*i+m*a+y*h,t[5]=d*s+m*u+y*f,t[6]=w*r+g*o+_*c,t[7]=w*i+g*a+_*h,t[8]=w*s+g*u+_*f,t},a.str=function(t){return"mat3("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+")"},t!==void 0&&(t.mat3=a);var c={},h=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);if(!n)var n=1e-6;c.create=function(){return new Float32Array(h)},c.clone=function(t){var e=new Float32Array(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e},c.copy=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t},c.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},c.transpose=function(t,e){if(t===e){var n=e[1],r=e[2],i=e[3],s=e[6],o=e[7],a=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=n,t[6]=e[9],t[7]=e[13],t[8]=r,t[9]=s,t[11]=e[14],t[12]=i,t[13]=o,t[14]=a}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t},c.invert=function(t,e){var n=e[0],r=e[1],i=e[2],s=e[3],o=e[4],a=e[5],u=e[6],c=e[7],h=e[8],f=e[9],v=e[10],p=e[11],l=e[12],d=e[13],m=e[14],y=e[15],w=n*a-r*o,g=n*u-i*o,_=n*c-s*o,x=r*u-i*a,b=r*c-s*a,M=i*c-s*u,k=h*d-f*l,E=h*m-v*l,L=h*y-p*l,A=f*m-v*d,q=f*y-p*d,F=v*y-p*m,z=w*F-g*q+_*A+x*L-b*E+M*k;return z?(z=1/z,t[0]=(a*F-u*q+c*A)*z,t[1]=(i*q-r*F-s*A)*z,t[2]=(d*M-m*b+y*x)*z,t[3]=(v*b-f*M-p*x)*z,t[4]=(u*L-o*F-c*E)*z,t[5]=(n*F-i*L+s*E)*z,t[6]=(m*_-l*M-y*g)*z,t[7]=(h*M-v*_+p*g)*z,t[8]=(o*q-a*L+c*k)*z,t[9]=(r*L-n*q-s*k)*z,t[10]=(l*b-d*_+y*w)*z,t[11]=(f*_-h*b-p*w)*z,t[12]=(a*E-o*A-u*k)*z,t[13]=(n*A-r*E+i*k)*z,t[14]=(d*g-l*x-m*w)*z,t[15]=(h*x-f*g+v*w)*z,t):null},c.adjoint=function(t,e){var n=e[0],r=e[1],i=e[2],s=e[3],o=e[4],a=e[5],u=e[6],c=e[7],h=e[8],f=e[9],v=e[10],p=e[11],l=e[12],d=e[13],m=e[14],y=e[15];return t[0]=a*(v*y-p*m)-f*(u*y-c*m)+d*(u*p-c*v),t[1]=-(r*(v*y-p*m)-f*(i*y-s*m)+d*(i*p-s*v)),t[2]=r*(u*y-c*m)-a*(i*y-s*m)+d*(i*c-s*u),t[3]=-(r*(u*p-c*v)-a*(i*p-s*v)+f*(i*c-s*u)),t[4]=-(o*(v*y-p*m)-h*(u*y-c*m)+l*(u*p-c*v)),t[5]=n*(v*y-p*m)-h*(i*y-s*m)+l*(i*p-s*v),t[6]=-(n*(u*y-c*m)-o*(i*y-s*m)+l*(i*c-s*u)),t[7]=n*(u*p-c*v)-o*(i*p-s*v)+h*(i*c-s*u),t[8]=o*(f*y-p*d)-h*(a*y-c*d)+l*(a*p-c*f),t[9]=-(n*(f*y-p*d)-h*(r*y-s*d)+l*(r*p-s*f)),t[10]=n*(a*y-c*d)-o*(r*y-s*d)+l*(r*c-s*a),t[11]=-(n*(a*p-c*f)-o*(r*p-s*f)+h*(r*c-s*a)),t[12]=-(o*(f*m-v*d)-h*(a*m-u*d)+l*(a*v-u*f)),t[13]=n*(f*m-v*d)-h*(r*m-i*d)+l*(r*v-i*f),t[14]=-(n*(a*m-u*d)-o*(r*m-i*d)+l*(r*u-i*a)),t[15]=n*(a*v-u*f)-o*(r*v-i*f)+h*(r*u-i*a),t},c.determinant=function(t){var e=t[0],n=t[1],r=t[2],i=t[3],s=t[4],o=t[5],a=t[6],u=t[7],c=t[8],h=t[9],f=t[10],v=t[11],p=t[12],l=t[13],d=t[14],m=t[15],y=e*o-n*s,w=e*a-r*s,g=e*u-i*s,_=n*a-r*o,x=n*u-i*o,b=r*u-i*a,M=c*l-h*p,k=c*d-f*p,E=c*m-v*p,L=h*d-f*l,A=h*m-v*l,q=f*m-v*d;return y*q-w*A+g*L+_*E-x*k+b*M},c.mul=c.multiply=function(t,e,n){var r=e[0],i=e[1],s=e[2],o=e[3],a=e[4],u=e[5],c=e[6],h=e[7],f=e[8],v=e[9],p=e[10],l=e[11],d=e[12],m=e[13],y=e[14],w=e[15],g=n[0],_=n[1],x=n[2],b=n[3];return t[0]=g*r+_*a+x*f+b*d,t[1]=g*i+_*u+x*v+b*m,t[2]=g*s+_*c+x*p+b*y,t[3]=g*o+_*h+x*l+b*w,g=n[4],_=n[5],x=n[6],b=n[7],t[4]=g*r+_*a+x*f+b*d,t[5]=g*i+_*u+x*v+b*m,t[6]=g*s+_*c+x*p+b*y,t[7]=g*o+_*h+x*l+b*w,g=n[8],_=n[9],x=n[10],b=n[11],t[8]=g*r+_*a+x*f+b*d,t[9]=g*i+_*u+x*v+b*m,t[10]=g*s+_*c+x*p+b*y,t[11]=g*o+_*h+x*l+b*w,g=n[12],_=n[13],x=n[14],b=n[15],t[12]=g*r+_*a+x*f+b*d,t[13]=g*i+_*u+x*v+b*m,t[14]=g*s+_*c+x*p+b*y,t[15]=g*o+_*h+x*l+b*w,t},c.translate=function(t,e,n){var r,i,s,o,a,u,c,h,f,v,p,l,d=n[0],m=n[1],y=n[2];return e===t?(t[12]=e[0]*d+e[4]*m+e[8]*y+e[12],t[13]=e[1]*d+e[5]*m+e[9]*y+e[13],t[14]=e[2]*d+e[6]*m+e[10]*y+e[14],t[15]=e[3]*d+e[7]*m+e[11]*y+e[15]):(r=e[0],i=e[1],s=e[2],o=e[3],a=e[4],u=e[5],c=e[6],h=e[7],f=e[8],v=e[9],p=e[10],l=e[11],t[0]=r,t[1]=i,t[2]=s,t[3]=o,t[4]=a,t[5]=u,t[6]=c,t[7]=h,t[8]=f,t[9]=v,t[10]=p,t[11]=l,t[12]=r*d+a*m+f*y+e[12],t[13]=i*d+u*m+v*y+e[13],t[14]=s*d+c*m+p*y+e[14],t[15]=o*d+h*m+l*y+e[15]),t},c.scale=function(t,e,n){var r=n[0],i=n[1],s=n[2];return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*s,t[9]=e[9]*s,t[10]=e[10]*s,t[11]=e[11]*s,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t},c.rotate=function(t,e,r,i){var s,o,a,u,c,h,f,v,p,l,d,m,y,w,g,_,x,b,M,k,E,L,A,q,F=i[0],z=i[1],C=i[2],j=Math.sqrt(F*F+z*z+C*C);return n>Math.abs(j)?null:(j=1/j,F*=j,z*=j,C*=j,s=Math.sin(r),o=Math.cos(r),a=1-o,u=e[0],c=e[1],h=e[2],f=e[3],v=e[4],p=e[5],l=e[6],d=e[7],m=e[8],y=e[9],w=e[10],g=e[11],_=F*F*a+o,x=z*F*a+C*s,b=C*F*a-z*s,M=F*z*a-C*s,k=z*z*a+o,E=C*z*a+F*s,L=F*C*a+z*s,A=z*C*a-F*s,q=C*C*a+o,t[0]=u*_+v*x+m*b,t[1]=c*_+p*x+y*b,t[2]=h*_+l*x+w*b,t[3]=f*_+d*x+g*b,t[4]=u*M+v*k+m*E,t[5]=c*M+p*k+y*E,t[6]=h*M+l*k+w*E,t[7]=f*M+d*k+g*E,t[8]=u*L+v*A+m*q,t[9]=c*L+p*A+y*q,t[10]=h*L+l*A+w*q,t[11]=f*L+d*A+g*q,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)},c.rotateX=function(t,e,n){var r=Math.sin(n),i=Math.cos(n),s=e[4],o=e[5],a=e[6],u=e[7],c=e[8],h=e[9],f=e[10],v=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=s*i+c*r,t[5]=o*i+h*r,t[6]=a*i+f*r,t[7]=u*i+v*r,t[8]=c*i-s*r,t[9]=h*i-o*r,t[10]=f*i-a*r,t[11]=v*i-u*r,t},c.rotateY=function(t,e,n){var r=Math.sin(n),i=Math.cos(n),s=e[0],o=e[1],a=e[2],u=e[3],c=e[8],h=e[9],f=e[10],v=e[11];return e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=s*i-c*r,t[1]=o*i-h*r,t[2]=a*i-f*r,t[3]=u*i-v*r,t[8]=s*r+c*i,t[9]=o*r+h*i,t[10]=a*r+f*i,t[11]=u*r+v*i,t},c.rotateZ=function(t,e,n){var r=Math.sin(n),i=Math.cos(n),s=e[0],o=e[1],a=e[2],u=e[3],c=e[4],h=e[5],f=e[6],v=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=s*i+c*r,t[1]=o*i+h*r,t[2]=a*i+f*r,t[3]=u*i+v*r,t[4]=c*i-s*r,t[5]=h*i-o*r,t[6]=f*i-a*r,t[7]=v*i-u*r,t},c.fromRotationTranslation=function(t,e,n){var r=e[0],i=e[1],s=e[2],o=e[3],a=r+r,u=i+i,c=s+s,h=r*a,f=r*u,v=r*c,p=i*u,l=i*c,d=s*c,m=o*a,y=o*u,w=o*c;return t[0]=1-(p+d),t[1]=f+w,t[2]=v-y,t[3]=0,t[4]=f-w,t[5]=1-(h+d),t[6]=l+m,t[7]=0,t[8]=v+y,t[9]=l-m,t[10]=1-(h+p),t[11]=0,t[12]=n[0],t[13]=n[1],t[14]=n[2],t[15]=1,t},c.frustum=function(t,e,n,r,i,s,o){var a=1/(n-e),u=1/(i-r),c=1/(s-o);return t[0]=2*s*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*s*u,t[6]=0,t[7]=0,t[8]=(n+e)*a,t[9]=(i+r)*u,t[10]=(o+s)*c,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*o*s*c,t[15]=0,t},c.perspective=function(t,e,n,r,i){var s=1/Math.tan(e/2),o=1/(r-i);return t[0]=s/n,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=s,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(i+r)*o,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*i*r*o,t[15]=0,t},c.ortho=function(t,e,n,r,i,s,o){var a=1/(e-n),u=1/(r-i),c=1/(s-o);return t[0]=-2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*u,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*c,t[11]=0,t[12]=(e+n)*a,t[13]=(i+r)*u,t[14]=(o+s)*c,t[15]=1,t},c.lookAt=function(t,e,r,i){var s,o,a,u,h,f,v,p,l,d,m=e[0],y=e[1],w=e[2],g=i[0],_=i[1],x=i[2],b=r[0],M=r[1],k=r[2];return n>Math.abs(m-b)&&n>Math.abs(y-M)&&n>Math.abs(w-k)?c.identity(t):(v=m-b,p=y-M,l=w-k,d=1/Math.sqrt(v*v+p*p+l*l),v*=d,p*=d,l*=d,s=_*l-x*p,o=x*v-g*l,a=g*p-_*v,d=Math.sqrt(s*s+o*o+a*a),d?(d=1/d,s*=d,o*=d,a*=d):(s=0,o=0,a=0),u=p*a-l*o,h=l*s-v*a,f=v*o-p*s,d=Math.sqrt(u*u+h*h+f*f),d?(d=1/d,u*=d,h*=d,f*=d):(u=0,h=0,f=0),t[0]=s,t[1]=u,t[2]=v,t[3]=0,t[4]=o,t[5]=h,t[6]=p,t[7]=0,t[8]=a,t[9]=f,t[10]=l,t[11]=0,t[12]=-(s*m+o*y+a*w),t[13]=-(u*m+h*y+f*w),t[14]=-(v*m+p*y+l*w),t[15]=1,t)},c.str=function(t){return"mat4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+", "+t[9]+", "+t[10]+", "+t[11]+", "+t[12]+", "+t[13]+", "+t[14]+", "+t[15]+")"
},t!==void 0&&(t.mat4=c);var f={},v=new Float32Array([0,0,0,1]);if(!n)var n=1e-6;f.create=function(){return new Float32Array(v)},f.clone=i.clone,f.fromValues=i.fromValues,f.copy=i.copy,f.set=i.set,f.identity=function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t},f.setAxisAngle=function(t,e,n){n=.5*n;var r=Math.sin(n);return t[0]=r*e[0],t[1]=r*e[1],t[2]=r*e[2],t[3]=Math.cos(n),t},f.add=i.add,f.mul=f.multiply=function(t,e,n){var r=e[0],i=e[1],s=e[2],o=e[3],a=n[0],u=n[1],c=n[2],h=n[3];return t[0]=r*h+o*a+i*c-s*u,t[1]=i*h+o*u+s*a-r*c,t[2]=s*h+o*c+r*u-i*a,t[3]=o*h-r*a-i*u-s*c,t},f.scale=i.scale,f.rotateX=function(t,e,n){n*=.5;var r=e[0],i=e[1],s=e[2],o=e[3],a=Math.sin(n),u=Math.cos(n);return t[0]=r*u+o*a,t[1]=i*u+s*a,t[2]=s*u-i*a,t[3]=o*u-r*a,t},f.rotateY=function(t,e,n){n*=.5;var r=e[0],i=e[1],s=e[2],o=e[3],a=Math.sin(n),u=Math.cos(n);return t[0]=r*u-s*a,t[1]=i*u+o*a,t[2]=s*u+r*a,t[3]=o*u-i*a,t},f.rotateZ=function(t,e,n){n*=.5;var r=e[0],i=e[1],s=e[2],o=e[3],a=Math.sin(n),u=Math.cos(n);return t[0]=r*u+i*a,t[1]=i*u-r*a,t[2]=s*u+o*a,t[3]=o*u-s*a,t},f.calculateW=function(t,e){var n=e[0],r=e[1],i=e[2];return t[0]=n,t[1]=r,t[2]=i,t[3]=-Math.sqrt(Math.abs(1-n*n-r*r-i*i)),t},f.dot=i.dot,f.lerp=i.lerp,f.slerp=function(t,e,n,r){var i,s,o,a,u=e[0],c=e[1],h=e[2],f=e[3],v=n[0],p=n[1],l=n[2],d=e[3],m=u*v+c*p+h*l+f*d;return Math.abs(m)>=1?(t!==e&&(t[0]=u,t[1]=c,t[2]=h,t[3]=f),t):(i=Math.acos(m),s=Math.sqrt(1-m*m),.001>Math.abs(s)?(t[0]=.5*u+.5*v,t[1]=.5*c+.5*p,t[2]=.5*h+.5*l,t[3]=.5*f+.5*d,t):(o=Math.sin((1-r)*i)/s,a=Math.sin(r*i)/s,t[0]=u*o+v*a,t[1]=c*o+p*a,t[2]=h*o+l*a,t[3]=f*o+d*a,t))},f.invert=function(t,e){var n=e[0],r=e[1],i=e[2],s=e[3],o=n*n+r*r+i*i+s*s,a=o?1/o:0;return t[0]=-n*a,t[1]=-r*a,t[2]=-i*a,t[3]=s*a,t},f.conjugate=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=e[3],t},f.len=f.length=i.length,f.sqrLen=f.squaredLength=i.squaredLength,f.normalize=i.normalize,f.str=function(t){return"quat("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},t!==void 0&&(t.quat=f)}(t.exports)})()})()},{}]},{},[]),require=function(t,e,n){function r(n,s){if(!e[n]){if(!t[n]){var o="function"==typeof require&&require;if(!s&&o)return o(n,!0);if(i)return i(n,!0);throw Error("Cannot find module '"+n+"'")}var a=e[n]={exports:{}};t[n][0].call(a.exports,function(e){var i=t[n][1][e];return r(i?i:e)},a,a.exports)}return e[n].exports}for(var i="function"==typeof require&&require,s=0;n.length>s;s++)r(n[s]);return r}({1:[function(t,e){var n=e.exports={};n.nextTick=function(){var t="undefined"!=typeof window&&window.setImmediate,e="undefined"!=typeof window&&window.postMessage&&window.addEventListener;if(t)return function(t){return window.setImmediate(t)};if(e){var n=[];return window.addEventListener("message",function(t){if(t.source===window&&"process-tick"===t.data&&(t.stopPropagation(),n.length>0)){var e=n.shift();e()}},!0),function(t){n.push(t),window.postMessage("process-tick","*")}}return function(t){setTimeout(t,0)}}(),n.title="browser",n.browser=!0,n.env={},n.argv=[],n.binding=function(){throw Error("process.binding is not supported")},n.cwd=function(){return"/"},n.chdir=function(){throw Error("process.chdir is not supported")}},{}],2:[function(t,e,n){(function(t){function e(t,e){if(t.indexOf)return t.indexOf(e);for(var n=0;t.length>n;n++)if(e===t[n])return n;return-1}t.EventEmitter||(t.EventEmitter=function(){});var r=n.EventEmitter=t.EventEmitter,i="function"==typeof Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},s=10;r.prototype.setMaxListeners=function(t){this._events||(this._events={}),this._events.maxListeners=t},r.prototype.emit=function(t){if("error"===t&&(!this._events||!this._events.error||i(this._events.error)&&!this._events.error.length))throw arguments[1]instanceof Error?arguments[1]:Error("Uncaught, unspecified 'error' event.");if(!this._events)return!1;var e=this._events[t];if(!e)return!1;if("function"==typeof e){switch(arguments.length){case 1:e.call(this);break;case 2:e.call(this,arguments[1]);break;case 3:e.call(this,arguments[1],arguments[2]);break;default:var n=Array.prototype.slice.call(arguments,1);e.apply(this,n)}return!0}if(i(e)){for(var n=Array.prototype.slice.call(arguments,1),r=e.slice(),s=0,o=r.length;o>s;s++)r[s].apply(this,n);return!0}return!1},r.prototype.addListener=function(t,e){if("function"!=typeof e)throw Error("addListener only takes instances of Function");if(this._events||(this._events={}),this.emit("newListener",t,e),this._events[t])if(i(this._events[t])){if(!this._events[t].warned){var n;n=void 0!==this._events.maxListeners?this._events.maxListeners:s,n&&n>0&&this._events[t].length>n&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),console.trace())}this._events[t].push(e)}else this._events[t]=[this._events[t],e];else this._events[t]=e;return this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(t,e){var n=this;return n.on(t,function r(){n.removeListener(t,r),e.apply(this,arguments)}),this},r.prototype.removeListener=function(t,n){if("function"!=typeof n)throw Error("removeListener only takes instances of Function");if(!this._events||!this._events[t])return this;var r=this._events[t];if(i(r)){var s=e(r,n);if(0>s)return this;r.splice(s,1),0==r.length&&delete this._events[t]}else this._events[t]===n&&delete this._events[t];return this},r.prototype.removeAllListeners=function(t){return 0===arguments.length?(this._events={},this):(t&&this._events&&this._events[t]&&(this._events[t]=null),this)},r.prototype.listeners=function(t){return this._events||(this._events={}),this._events[t]||(this._events[t]=[]),i(this._events[t])||(this._events[t]=[this._events[t]]),this._events[t]}})(t("__browserify_process"))},{__browserify_process:1}],"crtrdg-keyboard":[function(t,e){e.exports=t("Gj+61P")},{}],"Gj+61P":[function(t,e){function n(t){this.game=t||{},this.keysDown={},this.initializeListeners()}var r=t("events").EventEmitter,i=t("inherits"),s=t("vkey");e.exports=n,i(n,r),n.prototype.initializeListeners=function(){var t=this;document.addEventListener("keydown",function(e){t.emit("keydown",s[e.keyCode]),t.keysDown[s[e.keyCode]]=!0,(40===e.keyCode||38===e.keyCode||37===e.keyCode||39===e.keyCode||32===e.keyCode)&&e.preventDefault()},!1),document.addEventListener("keyup",function(e){t.emit("keyup",s[e.keyCode]),delete t.keysDown[s[e.keyCode]]},!1)}},{events:2,inherits:3,vkey:4}],3:[function(t,e){e.exports="function"==typeof Object.create?function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:function(t,e){t.super_=e;var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}},{}],4:[function(t,e){(function(){var t,n="undefined"!=typeof window?window.navigator.userAgent:"",r=/OS X/.test(n),i=/Opera/.test(n),s=!/like Gecko/.test(n)&&!i,o=e.exports={0:r?"<menu>":"<UNK>",1:"<mouse 1>",2:"<mouse 2>",3:"<break>",4:"<mouse 3>",5:"<mouse 4>",6:"<mouse 5>",8:"<backspace>",9:"<tab>",12:"<clear>",13:"<enter>",16:"<shift>",17:"<control>",18:"<alt>",19:"<pause>",20:"<caps-lock>",21:"<ime-hangul>",23:"<ime-junja>",24:"<ime-final>",25:"<ime-kanji>",27:"<escape>",28:"<ime-convert>",29:"<ime-nonconvert>",30:"<ime-accept>",31:"<ime-mode-change>",27:"<escape>",32:"<space>",33:"<page-up>",34:"<page-down>",35:"<end>",36:"<home>",37:"<left>",38:"<up>",39:"<right>",40:"<down>",41:"<select>",42:"<print>",43:"<execute>",44:"<snapshot>",45:"<insert>",46:"<delete>",47:"<help>",91:"<meta>",92:"<meta>",93:r?"<meta>":"<menu>",95:"<sleep>",106:"<num-*>",107:"<num-+>",108:"<num-enter>",109:"<num-->",110:"<num-.>",111:"<num-/>",144:"<num-lock>",145:"<scroll-lock>",160:"<shift-left>",161:"<shift-right>",162:"<control-left>",163:"<control-right>",164:"<alt-left>",165:"<alt-right>",166:"<browser-back>",167:"<browser-forward>",168:"<browser-refresh>",169:"<browser-stop>",170:"<browser-search>",171:"<browser-favorites>",172:"<browser-home>",173:r&&s?"-":"<volume-mute>",174:"<volume-down>",175:"<volume-up>",176:"<next-track>",177:"<prev-track>",178:"<stop>",179:"<play-pause>",180:"<launch-mail>",181:"<launch-media-select>",182:"<launch-app 1>",183:"<launch-app 2>",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",223:"<meta>",224:"<meta>",226:"<alt-gr>",229:"<ime-process>",231:i?"`":"<unicode>",246:"<attention>",247:"<crsel>",248:"<exsel>",249:"<erase-eof>",250:"<play>",251:"<zoom>",252:"<no-name>",253:"<pa-1>",254:"<clear>"};for(t=58;65>t;++t)o[t]=String.fromCharCode(t);for(t=48;58>t;++t)o[t]=t-48+"";for(t=65;91>t;++t)o[t]=String.fromCharCode(t);for(t=96;107>t;++t)o[t]="<num-"+(t-96)+">";for(t=112;136>t;++t)o[t]="F"+(t-111)})()},{}]},{},[]);var Game=require("crtrdg-gameloop"),Player=require("crtrdg-player"),Keyboard=require("crtrdg-keyboard"),canvas=document.createElement("canvas");canvas.id="game",document.body.appendChild(canvas);var game=new Game({canvasId:"game",width:window.innerWidth,height:window.innerHeight,backgroundColor:"#E187B8"}),keyboard=new Keyboard(game),player=new Player(game),player=new Player({position:{x:10,y:10},size:{x:10,y:10},color:"#fff"});player.addTo(game),player.on("update",function(){this.keyboardInput(keyboard),this.move(),this.checkBoundaries()}),player.on("draw",function(t){t.fillStyle=this.color,t.fillRect(this.position.x,this.position.y,this.size.x,this.size.y)});
<style type='text/css'>html, body { margin: 0; padding: 0; border: 0; }
body, html { height: 100%; width: 100%; }</style>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment