From f5cc0629220d6f19bf9df102874e88bf79eee961 Mon Sep 17 00:00:00 2001 From: Mat Groves Date: Wed, 20 Mar 2013 20:21:27 +0000 Subject: [PATCH] Interactivity Added -Interaction Manager added to pixi.js to enable mouse and touch interactivity. - Interactive example added to examples folder - docs updated - build file updated --- README.md | 4 + bin/pixi.js | 238 ++--- build/PixiBuild.xml | 2 +- docs/api.js | 2 + docs/classes/AssetLoader.html | 8 +- docs/classes/BaseTexture.html | 8 +- docs/classes/CanvasRenderer.html | 18 +- docs/classes/DisplayObject.html | 29 +- docs/classes/DisplayObjectContainer.html | 8 +- docs/classes/InteractionData.html | 369 ++++++++ docs/classes/InteractionManager.html | 594 ++++++++++++ docs/classes/MovieClip.html | 832 ++++++++++++++++- docs/classes/Point.html | 8 +- docs/classes/Rectangle.html | 8 +- docs/classes/Sprite.html | 865 +++++++++++++++++- docs/classes/SpriteSheetLoader.html | 8 +- docs/classes/Stage.html | 33 +- docs/classes/Texture.html | 25 +- docs/classes/WebGLBatch.html | 8 +- docs/classes/WebGLRenderer.html | 33 +- docs/data.json | 380 +++++++- docs/files/pixi_DisplayObject.js.html | 13 +- .../files/pixi_DisplayObjectContainer.js.html | 12 +- docs/files/pixi_InteractionManager.js.html | 483 ++++++++++ docs/files/pixi_MovieClip.js.html | 8 +- docs/files/pixi_Pixi.js.html | 8 +- docs/files/pixi_Point.js.html | 8 +- docs/files/pixi_Rectangle.js.html | 8 +- docs/files/pixi_Sprite.js.html | 92 +- docs/files/pixi_Stage.js.html | 33 +- docs/files/pixi_extras_Rope.js.html | 8 +- docs/files/pixi_extras_Strip.js.html | 8 +- docs/files/pixi_loaders_AssetLoader.js.html | 8 +- .../pixi_loaders_SpriteSheetLoader.js.html | 8 +- .../pixi_renderers_CanvasRenderer.js.html | 25 +- docs/files/pixi_renderers_WebGLBatch.js.html | 8 +- .../pixi_renderers_WebGLRenderer.js.html | 26 +- .../files/pixi_renderers_WebGLShaders.js.html | 8 +- docs/files/pixi_textures_BaseTexture.js.html | 8 +- docs/files/pixi_textures_Texture.js.html | 13 +- docs/files/pixi_utils_Detector.js.html | 15 +- docs/files/pixi_utils_EventTarget.js.html | 8 +- docs/files/pixi_utils_Utils.js.html | 8 +- docs/index.html | 8 +- docs/logo_small.png | Bin 14027 -> 0 bytes docs/modules/PIXI.html | 20 +- examples/example 6 - Interactivity/button.png | Bin 0 -> 42648 bytes .../example 6 - Interactivity/buttonDown.png | Bin 0 -> 44062 bytes .../example 6 - Interactivity/buttonOver.png | Bin 0 -> 42712 bytes .../button_test_BG.jpg | Bin 0 -> 31875 bytes examples/example 6 - Interactivity/index.html | 175 ++++ examples/example 6 - Interactivity/pixi.js | 128 +++ examples/example 6 - Interactivity/pixi.png | Bin 0 -> 2138 bytes src/pixi/DisplayObject.js | 3 + src/pixi/DisplayObjectContainer.js | 4 +- src/pixi/InteractionManager.js | 343 +++++++ src/pixi/Sprite.js | 82 +- src/pixi/Stage.js | 25 +- src/pixi/renderers/CanvasRenderer.js | 12 + src/pixi/renderers/WebGLRenderer.js | 13 +- src/pixi/textures/Texture.js | 5 +- src/pixi/utils/Detector.js | 4 + src/yuidoc.json | 6 +- 63 files changed, 4844 insertions(+), 280 deletions(-) create mode 100644 docs/classes/InteractionData.html create mode 100644 docs/classes/InteractionManager.html create mode 100644 docs/files/pixi_InteractionManager.js.html delete mode 100644 docs/logo_small.png create mode 100644 examples/example 6 - Interactivity/button.png create mode 100644 examples/example 6 - Interactivity/buttonDown.png create mode 100644 examples/example 6 - Interactivity/buttonOver.png create mode 100644 examples/example 6 - Interactivity/button_test_BG.jpg create mode 100644 examples/example 6 - Interactivity/index.html create mode 100644 examples/example 6 - Interactivity/pixi.js create mode 100755 examples/example 6 - Interactivity/pixi.png create mode 100644 src/pixi/InteractionManager.js diff --git a/README.md b/README.md index b9a1118..263ccf9 100644 --- a/README.md +++ b/README.md @@ -86,4 +86,8 @@ last 2 examples and allowing us to share the source code :) } ``` +<<<<<<< HEAD This content is released under the (http://opensource.org/licenses/MIT) MIT License. +======= +This content is released under the (http://opensource.org/licenses/MIT) MIT License. +>>>>>>> Interactivity Added diff --git a/bin/pixi.js b/bin/pixi.js index 775c51c..e4c61db 100644 --- a/bin/pixi.js +++ b/bin/pixi.js @@ -1,114 +1,128 @@ -var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]} -"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}()); -var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)}; -var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a, -d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l* -l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b= -a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1; -u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a, -d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d= -a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g= -a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l}, -set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a, -d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+ -a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4]; -d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]- -d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12]; -d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a, -d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]= -(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10]; -return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0], -q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d); -var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+ -a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*= -d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w= -a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10], -n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g* -d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0; -k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c|| -(c=u.create());var e,f,k,g,h,j,m,n,p=a[0],q=a[1];a=a[2];k=b[0];g=b[1];f=b[2];m=d[0];b=d[1];e=d[2];if(p===m&&q===b&&a===e)return u.identity(c);d=p-m;b=q-b;m=a-e;n=1/Math.sqrt(d*d+b*b+m*m);d*=n;b*=n;m*=n;e=g*m-f*b;f=f*d-k*m;k=k*b-g*d;(n=Math.sqrt(e*e+f*f+k*k))?(n=1/n,e*=n,f*=n,k*=n):k=f=e=0;g=b*k-m*f;h=m*e-d*k;j=d*f-b*e;(n=Math.sqrt(g*g+h*h+j*j))?(n=1/n,g*=n,h*=n,j*=n):j=h=g=0;c[0]=e;c[1]=g;c[2]=d;c[3]=0;c[4]=f;c[5]=h;c[6]=b;c[7]=0;c[8]=k;c[9]=j;c[10]=m;c[11]=0;c[12]=-(e*p+f*q+k*a);c[13]=-(g*p+h*q+ -j*a);c[14]=-(d*p+b*q+m*a);c[15]=1;return c},fromRotationTranslation:function(a,d,b){b||(b=u.create());var c=a[0],e=a[1],f=a[2],k=a[3],g=c+c,h=e+e,j=f+f;a=c*g;var m=c*h,c=c*j,n=e*h,e=e*j,f=f*j,g=k*g,h=k*h,k=k*j;b[0]=1-(n+f);b[1]=m+k;b[2]=c-h;b[3]=0;b[4]=m-k;b[5]=1-(a+f);b[6]=e+g;b[7]=0;b[8]=c+h;b[9]=e-g;b[10]=1-(a+n);b[11]=0;b[12]=d[0];b[13]=d[1];b[14]=d[2];b[15]=1;return b},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+ -a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"}},m={create:function(a){var d=new j(4);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3]):d[0]=d[1]=d[2]=d[3]=0;return d},createFrom:function(a,d,b,c){var e=new j(4);e[0]=a;e[1]=d;e[2]=b;e[3]=c;return e},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])},identity:function(a){a||(a=m.create()); -a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a}},E=m.identity();m.calculateW=function(a,d){var b=a[0],c=a[1],e=a[2];if(!d||a===d)return a[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e)),a;d[0]=b;d[1]=c;d[2]=e;d[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e));return d};m.dot=function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3]};m.inverse=function(a,d){var b=a[0],c=a[1],e=a[2],f=a[3],b=(b=b*b+c*c+e*e+f*f)?1/b:0;if(!d||a===d)return a[0]*=-b,a[1]*=-b,a[2]*=-b,a[3]*=b,a;d[0]=-a[0]*b;d[1]=-a[1]*b;d[2]=-a[2]*b;d[3]=a[3]*b; -return d};m.conjugate=function(a,d){if(!d||a===d)return a[0]*=-1,a[1]*=-1,a[2]*=-1,a;d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];d[3]=a[3];return d};m.length=function(a){var d=a[0],b=a[1],c=a[2];a=a[3];return Math.sqrt(d*d+b*b+c*c+a*a)};m.normalize=function(a,d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=Math.sqrt(b*b+c*c+e*e+f*f);if(0===k)return d[0]=0,d[1]=0,d[2]=0,d[3]=0,d;k=1/k;d[0]=b*k;d[1]=c*k;d[2]=e*k;d[3]=f*k;return d};m.add=function(a,d,b){if(!b||a===b)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a[3]+= -d[3],a;b[0]=a[0]+d[0];b[1]=a[1]+d[1];b[2]=a[2]+d[2];b[3]=a[3]+d[3];return b};m.multiply=function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2];a=a[3];var k=d[0],g=d[1],h=d[2];d=d[3];b[0]=c*d+a*k+e*h-f*g;b[1]=e*d+a*g+f*k-c*h;b[2]=f*d+a*h+c*g-e*k;b[3]=a*d-c*k-e*g-f*h;return b};m.multiplyVec3=function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=a[0];var k=a[1],g=a[2];a=a[3];var h=a*c+k*f-g*e,j=a*e+g*c-d*f,m=a*f+d*e-k*c,c=-d*c-k*e-g*f;b[0]=h*a+c*-d+j*-g-m*-k;b[1]=j*a+c*-k+m*-d-h*-g;b[2]=m*a+c*-g+h*-k-j*-d; -return b};m.scale=function(a,d,b){if(!b||a===b)return a[0]*=d,a[1]*=d,a[2]*=d,a[3]*=d,a;b[0]=a[0]*d;b[1]=a[1]*d;b[2]=a[2]*d;b[3]=a[3]*d;return b};m.toMat3=function(a,d){d||(d=y.create());var b=a[0],c=a[1],e=a[2],f=a[3],k=b+b,g=c+c,h=e+e,j=b*k,m=b*g,b=b*h,n=c*g,c=c*h,e=e*h,k=f*k,g=f*g,f=f*h;d[0]=1-(n+e);d[1]=m+f;d[2]=b-g;d[3]=m-f;d[4]=1-(j+e);d[5]=c+k;d[6]=b+g;d[7]=c-k;d[8]=1-(j+n);return d};m.toMat4=function(a,d){d||(d=u.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b* -j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+ -0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c= -0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2]; -return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a); -b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0 -Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a, -b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]= -g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a, -b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b|| -(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType= -f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"]; +var PIXI=PIXI||{};PIXI.Point=function(a,c){this.x=a?a:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(a,c,f,d){this.x=a?a:0;this.y=c?c:0;this.width=f?f:0;this.height=d?d:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){window.setTimeout(a,1E3/60)}}();function HEXtoRGB(a){return[(a>>16&255)/255,(a>>8&255)/255,(a&255)/255]} +"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var a=Array.prototype.slice;return function(c){function f(){var h=g.concat(a.call(arguments));d.apply(this instanceof f?this:c,h)}var d=this,g=a.call(arguments,1);if("function"!=typeof d)throw new TypeError;f.prototype=function j(a){a&&(j.prototype=a);if(!(this instanceof j))return new j}(d.prototype);return f}}()); +var AjaxRequest=function(){var a=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var e=g[0];return e*(1.5-0.5*b*e*e)}}else d.invsqrt=function(b){return 1/Math.sqrt(b)}; +var j=null;f();var k={create:function(b){var e=new j(3);b?(e[0]=b[0],e[1]=b[1],e[2]=b[2]):e[0]=e[1]=e[2]=0;return e},createFrom:function(b,e,a){var c=new j(3);c[0]=b;c[1]=e;c[2]=a;return c},set:function(b,e){e[0]=b[0];e[1]=b[1];e[2]=b[2];return e},equal:function(b,e){return b===e||1E-6>Math.abs(b[0]-e[0])&&1E-6>Math.abs(b[1]-e[1])&&1E-6>Math.abs(b[2]-e[2])},add:function(b,e,a){if(!a||b===a)return b[0]+=e[0],b[1]+=e[1],b[2]+=e[2],b;a[0]=b[0]+e[0];a[1]=b[1]+e[1];a[2]=b[2]+e[2];return a},subtract:function(b, +e,a){if(!a||b===a)return b[0]-=e[0],b[1]-=e[1],b[2]-=e[2],b;a[0]=b[0]-e[0];a[1]=b[1]-e[1];a[2]=b[2]-e[2];return a},multiply:function(b,e,a){if(!a||b===a)return b[0]*=e[0],b[1]*=e[1],b[2]*=e[2],b;a[0]=b[0]*e[0];a[1]=b[1]*e[1];a[2]=b[2]*e[2];return a},negate:function(b,e){e||(e=b);e[0]=-b[0];e[1]=-b[1];e[2]=-b[2];return e},scale:function(b,e,a){if(!a||b===a)return b[0]*=e,b[1]*=e,b[2]*=e,b;a[0]=b[0]*e;a[1]=b[1]*e;a[2]=b[2]*e;return a},normalize:function(b,e){e||(e=b);var a=b[0],c=b[1],p=b[2],d=Math.sqrt(a* +a+c*c+p*p);if(!d)return e[0]=0,e[1]=0,e[2]=0,e;if(1===d)return e[0]=a,e[1]=c,e[2]=p,e;d=1/d;e[0]=a*d;e[1]=c*d;e[2]=p*d;return e},cross:function(b,e,a){a||(a=b);var c=b[0],p=b[1];b=b[2];var d=e[0],f=e[1];e=e[2];a[0]=p*e-b*f;a[1]=b*d-c*e;a[2]=c*f-p*d;return a},length:function(b){var e=b[0],a=b[1];b=b[2];return Math.sqrt(e*e+a*a+b*b)},squaredLength:function(b){var e=b[0],a=b[1];b=b[2];return e*e+a*a+b*b},dot:function(b,e){return b[0]*e[0]+b[1]*e[1]+b[2]*e[2]},direction:function(b,e,a){a||(a=b);var c= +b[0]-e[0],p=b[1]-e[1];b=b[2]-e[2];e=Math.sqrt(c*c+p*p+b*b);if(!e)return a[0]=0,a[1]=0,a[2]=0,a;e=1/e;a[0]=c*e;a[1]=p*e;a[2]=b*e;return a},lerp:function(b,e,a,c){c||(c=b);c[0]=b[0]+a*(e[0]-b[0]);c[1]=b[1]+a*(e[1]-b[1]);c[2]=b[2]+a*(e[2]-b[2]);return c},dist:function(b,e){var a=e[0]-b[0],c=e[1]-b[1],p=e[2]-b[2];return Math.sqrt(a*a+c*c+p*p)}},r=null,n=new j(4);k.unproject=function(b,e,a,c,p){p||(p=b);r||(r=s.create());var d=r;n[0]=2*(b[0]-c[0])/c[2]-1;n[1]=2*(b[1]-c[1])/c[3]-1;n[2]=2*b[2]-1;n[3]=1; +s.multiply(a,e,d);if(!s.inverse(d))return null;s.multiplyVec4(d,n);if(0===n[3])return null;p[0]=n[0]/n[3];p[1]=n[1]/n[3];p[2]=n[2]/n[3];return p};var y=k.createFrom(1,0,0),C=k.createFrom(0,1,0),m=k.createFrom(0,0,1),u=k.create();k.rotationTo=function(b,e,a){a||(a=l.create());var c=k.dot(b,e);if(1<=c)l.set(E,a);else if(-0.999999>c)k.cross(y,b,u),1E-6>k.length(u)&&k.cross(C,b,u),1E-6>k.length(u)&&k.cross(m,b,u),k.normalize(u),l.fromAngleAxis(Math.PI,u,a);else{var c=Math.sqrt(2*(1+c)),p=1/c;k.cross(b, +e,u);a[0]=u[0]*p;a[1]=u[1]*p;a[2]=u[2]*p;a[3]=0.5*c;l.normalize(a)}1a[3]&&(a[3]=-1);return a};k.str=function(b){return"["+b[0]+", "+b[1]+", "+b[2]+"]"};var x={create:function(b){var e=new j(9);b?(e[0]=b[0],e[1]=b[1],e[2]=b[2],e[3]=b[3],e[4]=b[4],e[5]=b[5],e[6]=b[6],e[7]=b[7],e[8]=b[8]):e[0]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=0;return e},createFrom:function(b,e,a,c,p,d,f,g,G){var v=new j(9);v[0]=b;v[1]=e;v[2]=a;v[3]=c;v[4]=p;v[5]=d;v[6]=f;v[7]=g;v[8]=G;return v},determinant:function(b){var e= +b[3],a=b[4],c=b[5],p=b[6],d=b[7],f=b[8];return b[0]*(f*a-c*d)+b[1]*(-f*e+c*p)+b[2]*(d*e-a*p)},inverse:function(b,e){var a=b[0],c=b[1],p=b[2],d=b[3],f=b[4],g=b[5],G=b[6],v=b[7],h=b[8],j=h*f-g*v,k=-h*d+g*G,l=v*d-f*G,q=a*j+c*k+p*l;if(!q)return null;q=1/q;e||(e=x.create());e[0]=j*q;e[1]=(-h*c+p*v)*q;e[2]=(g*c-p*f)*q;e[3]=k*q;e[4]=(h*a-p*G)*q;e[5]=(-g*a+p*d)*q;e[6]=l*q;e[7]=(-v*a+c*G)*q;e[8]=(f*a-c*d)*q;return e},multiply:function(b,e,a){a||(a=b);var c=b[0],p=b[1],d=b[2],f=b[3],g=b[4],G=b[5],v=b[6],h= +b[7];b=b[8];var j=e[0],k=e[1],l=e[2],q=e[3],m=e[4],t=e[5],n=e[6],w=e[7];e=e[8];a[0]=j*c+k*f+l*v;a[1]=j*p+k*g+l*h;a[2]=j*d+k*G+l*b;a[3]=q*c+m*f+t*v;a[4]=q*p+m*g+t*h;a[5]=q*d+m*G+t*b;a[6]=n*c+w*f+e*v;a[7]=n*p+w*g+e*h;a[8]=n*d+w*G+e*b;return a},multiplyVec2:function(b,e,a){a||(a=e);var c=e[0];e=e[1];a[0]=c*b[0]+e*b[3]+b[6];a[1]=c*b[1]+e*b[4]+b[7];return a},multiplyVec3:function(b,e,a){a||(a=e);var c=e[0],p=e[1];e=e[2];a[0]=c*b[0]+p*b[3]+e*b[6];a[1]=c*b[1]+p*b[4]+e*b[7];a[2]=c*b[2]+p*b[5]+e*b[8];return a}, +set:function(b,e){e[0]=b[0];e[1]=b[1];e[2]=b[2];e[3]=b[3];e[4]=b[4];e[5]=b[5];e[6]=b[6];e[7]=b[7];e[8]=b[8];return e},equal:function(b,e){return b===e||1E-6>Math.abs(b[0]-e[0])&&1E-6>Math.abs(b[1]-e[1])&&1E-6>Math.abs(b[2]-e[2])&&1E-6>Math.abs(b[3]-e[3])&&1E-6>Math.abs(b[4]-e[4])&&1E-6>Math.abs(b[5]-e[5])&&1E-6>Math.abs(b[6]-e[6])&&1E-6>Math.abs(b[7]-e[7])&&1E-6>Math.abs(b[8]-e[8])},identity:function(b){b||(b=x.create());b[0]=1;b[1]=0;b[2]=0;b[3]=0;b[4]=1;b[5]=0;b[6]=0;b[7]=0;b[8]=1;return b},transpose:function(b, +e){if(!e||b===e){var a=b[1],c=b[2],p=b[5];b[1]=b[3];b[2]=b[6];b[3]=a;b[5]=b[7];b[6]=c;b[7]=p;return b}e[0]=b[0];e[1]=b[3];e[2]=b[6];e[3]=b[1];e[4]=b[4];e[5]=b[7];e[6]=b[2];e[7]=b[5];e[8]=b[8];return e},toMat4:function(b,e){e||(e=s.create());e[15]=1;e[14]=0;e[13]=0;e[12]=0;e[11]=0;e[10]=b[8];e[9]=b[7];e[8]=b[6];e[7]=0;e[6]=b[5];e[5]=b[4];e[4]=b[3];e[3]=0;e[2]=b[2];e[1]=b[1];e[0]=b[0];return e},str:function(b){return"["+b[0]+", "+b[1]+", "+b[2]+", "+b[3]+", "+b[4]+", "+b[5]+", "+b[6]+", "+b[7]+", "+ +b[8]+"]"}},s={create:function(b){var e=new j(16);b&&(e[0]=b[0],e[1]=b[1],e[2]=b[2],e[3]=b[3],e[4]=b[4],e[5]=b[5],e[6]=b[6],e[7]=b[7],e[8]=b[8],e[9]=b[9],e[10]=b[10],e[11]=b[11],e[12]=b[12],e[13]=b[13],e[14]=b[14],e[15]=b[15]);return e},createFrom:function(b,e,a,c,p,d,f,g,h,v,N,I,k,l,q,m){var t=new j(16);t[0]=b;t[1]=e;t[2]=a;t[3]=c;t[4]=p;t[5]=d;t[6]=f;t[7]=g;t[8]=h;t[9]=v;t[10]=N;t[11]=I;t[12]=k;t[13]=l;t[14]=q;t[15]=m;return t},set:function(b,e){e[0]=b[0];e[1]=b[1];e[2]=b[2];e[3]=b[3];e[4]=b[4]; +e[5]=b[5];e[6]=b[6];e[7]=b[7];e[8]=b[8];e[9]=b[9];e[10]=b[10];e[11]=b[11];e[12]=b[12];e[13]=b[13];e[14]=b[14];e[15]=b[15];return e},equal:function(b,e){return b===e||1E-6>Math.abs(b[0]-e[0])&&1E-6>Math.abs(b[1]-e[1])&&1E-6>Math.abs(b[2]-e[2])&&1E-6>Math.abs(b[3]-e[3])&&1E-6>Math.abs(b[4]-e[4])&&1E-6>Math.abs(b[5]-e[5])&&1E-6>Math.abs(b[6]-e[6])&&1E-6>Math.abs(b[7]-e[7])&&1E-6>Math.abs(b[8]-e[8])&&1E-6>Math.abs(b[9]-e[9])&&1E-6>Math.abs(b[10]-e[10])&&1E-6>Math.abs(b[11]-e[11])&&1E-6>Math.abs(b[12]- +e[12])&&1E-6>Math.abs(b[13]-e[13])&&1E-6>Math.abs(b[14]-e[14])&&1E-6>Math.abs(b[15]-e[15])},identity:function(b){b||(b=s.create());b[0]=1;b[1]=0;b[2]=0;b[3]=0;b[4]=0;b[5]=1;b[6]=0;b[7]=0;b[8]=0;b[9]=0;b[10]=1;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return b},transpose:function(b,e){if(!e||b===e){var a=b[1],c=b[2],p=b[3],d=b[6],f=b[7],g=b[11];b[1]=b[4];b[2]=b[8];b[3]=b[12];b[4]=a;b[6]=b[9];b[7]=b[13];b[8]=c;b[9]=d;b[11]=b[14];b[12]=p;b[13]=f;b[14]=g;return b}e[0]=b[0];e[1]=b[4];e[2]=b[8];e[3]=b[12]; +e[4]=b[1];e[5]=b[5];e[6]=b[9];e[7]=b[13];e[8]=b[2];e[9]=b[6];e[10]=b[10];e[11]=b[14];e[12]=b[3];e[13]=b[7];e[14]=b[11];e[15]=b[15];return e},determinant:function(b){var e=b[0],a=b[1],c=b[2],p=b[3],d=b[4],f=b[5],g=b[6],h=b[7],v=b[8],j=b[9],I=b[10],k=b[11],l=b[12],q=b[13],m=b[14];b=b[15];return l*j*g*p-v*q*g*p-l*f*I*p+d*q*I*p+v*f*m*p-d*j*m*p-l*j*c*h+v*q*c*h+l*a*I*h-e*q*I*h-v*a*m*h+e*j*m*h+l*f*c*k-d*q*c*k-l*a*g*k+e*q*g*k+d*a*m*k-e*f*m*k-v*f*c*b+d*j*c*b+v*a*g*b-e*j*g*b-d*a*I*b+e*f*I*b},inverse:function(b, +e){e||(e=b);var a=b[0],c=b[1],p=b[2],d=b[3],f=b[4],g=b[5],h=b[6],v=b[7],j=b[8],k=b[9],l=b[10],m=b[11],q=b[12],n=b[13],t=b[14],r=b[15],w=a*g-c*f,B=a*h-p*f,z=a*v-d*f,A=c*h-p*g,s=c*v-d*g,u=p*v-d*h,x=j*n-k*q,y=j*t-l*q,C=j*r-m*q,D=k*t-l*n,E=k*r-m*n,J=l*r-m*t,F=w*J-B*E+z*D+A*C-s*y+u*x;if(!F)return null;F=1/F;e[0]=(g*J-h*E+v*D)*F;e[1]=(-c*J+p*E-d*D)*F;e[2]=(n*u-t*s+r*A)*F;e[3]=(-k*u+l*s-m*A)*F;e[4]=(-f*J+h*C-v*y)*F;e[5]=(a*J-p*C+d*y)*F;e[6]=(-q*u+t*z-r*B)*F;e[7]=(j*u-l*z+m*B)*F;e[8]=(f*E-g*C+v*x)*F;e[9]= +(-a*E+c*C-d*x)*F;e[10]=(q*s-n*z+r*w)*F;e[11]=(-j*s+k*z-m*w)*F;e[12]=(-f*D+g*y-h*x)*F;e[13]=(a*D-c*y+p*x)*F;e[14]=(-q*A+n*B-t*w)*F;e[15]=(j*A-k*B+l*w)*F;return e},toRotationMat:function(b,e){e||(e=s.create());e[0]=b[0];e[1]=b[1];e[2]=b[2];e[3]=b[3];e[4]=b[4];e[5]=b[5];e[6]=b[6];e[7]=b[7];e[8]=b[8];e[9]=b[9];e[10]=b[10];e[11]=b[11];e[12]=0;e[13]=0;e[14]=0;e[15]=1;return e},toMat3:function(b,e){e||(e=x.create());e[0]=b[0];e[1]=b[1];e[2]=b[2];e[3]=b[4];e[4]=b[5];e[5]=b[6];e[6]=b[8];e[7]=b[9];e[8]=b[10]; +return e},toInverseMat3:function(b,e){var a=b[0],c=b[1],d=b[2],f=b[4],H=b[5],g=b[6],h=b[8],j=b[9],k=b[10],l=k*H-g*j,m=-k*f+g*h,n=j*f-H*h,q=a*l+c*m+d*n;if(!q)return null;q=1/q;e||(e=x.create());e[0]=l*q;e[1]=(-k*c+d*j)*q;e[2]=(g*c-d*H)*q;e[3]=m*q;e[4]=(k*a-d*h)*q;e[5]=(-g*a+d*f)*q;e[6]=n*q;e[7]=(-j*a+c*h)*q;e[8]=(H*a-c*f)*q;return e},multiply:function(b,e,a){a||(a=b);var c=b[0],d=b[1],f=b[2],H=b[3],g=b[4],h=b[5],j=b[6],k=b[7],l=b[8],m=b[9],n=b[10],q=b[11],r=b[12],t=b[13],s=b[14];b=b[15];var w=e[0], +B=e[1],z=e[2],A=e[3];a[0]=w*c+B*g+z*l+A*r;a[1]=w*d+B*h+z*m+A*t;a[2]=w*f+B*j+z*n+A*s;a[3]=w*H+B*k+z*q+A*b;w=e[4];B=e[5];z=e[6];A=e[7];a[4]=w*c+B*g+z*l+A*r;a[5]=w*d+B*h+z*m+A*t;a[6]=w*f+B*j+z*n+A*s;a[7]=w*H+B*k+z*q+A*b;w=e[8];B=e[9];z=e[10];A=e[11];a[8]=w*c+B*g+z*l+A*r;a[9]=w*d+B*h+z*m+A*t;a[10]=w*f+B*j+z*n+A*s;a[11]=w*H+B*k+z*q+A*b;w=e[12];B=e[13];z=e[14];A=e[15];a[12]=w*c+B*g+z*l+A*r;a[13]=w*d+B*h+z*m+A*t;a[14]=w*f+B*j+z*n+A*s;a[15]=w*H+B*k+z*q+A*b;return a},multiplyVec3:function(b,e,a){a||(a=e); +var c=e[0],d=e[1];e=e[2];a[0]=b[0]*c+b[4]*d+b[8]*e+b[12];a[1]=b[1]*c+b[5]*d+b[9]*e+b[13];a[2]=b[2]*c+b[6]*d+b[10]*e+b[14];return a},multiplyVec4:function(b,e,a){a||(a=e);var c=e[0],d=e[1],f=e[2];e=e[3];a[0]=b[0]*c+b[4]*d+b[8]*f+b[12]*e;a[1]=b[1]*c+b[5]*d+b[9]*f+b[13]*e;a[2]=b[2]*c+b[6]*d+b[10]*f+b[14]*e;a[3]=b[3]*c+b[7]*d+b[11]*f+b[15]*e;return a},translate:function(b,e,a){var c=e[0],d=e[1];e=e[2];var f,g,h,j,v,k,l,m,n,q,r,t;if(!a||b===a)return b[12]=b[0]*c+b[4]*d+b[8]*e+b[12],b[13]=b[1]*c+b[5]*d+ +b[9]*e+b[13],b[14]=b[2]*c+b[6]*d+b[10]*e+b[14],b[15]=b[3]*c+b[7]*d+b[11]*e+b[15],b;f=b[0];g=b[1];h=b[2];j=b[3];v=b[4];k=b[5];l=b[6];m=b[7];n=b[8];q=b[9];r=b[10];t=b[11];a[0]=f;a[1]=g;a[2]=h;a[3]=j;a[4]=v;a[5]=k;a[6]=l;a[7]=m;a[8]=n;a[9]=q;a[10]=r;a[11]=t;a[12]=f*c+v*d+n*e+b[12];a[13]=g*c+k*d+q*e+b[13];a[14]=h*c+l*d+r*e+b[14];a[15]=j*c+m*d+t*e+b[15];return a},scale:function(b,e,a){var c=e[0],d=e[1];e=e[2];if(!a||b===a)return b[0]*=c,b[1]*=c,b[2]*=c,b[3]*=c,b[4]*=d,b[5]*=d,b[6]*=d,b[7]*=d,b[8]*=e,b[9]*= +e,b[10]*=e,b[11]*=e,b;a[0]=b[0]*c;a[1]=b[1]*c;a[2]=b[2]*c;a[3]=b[3]*c;a[4]=b[4]*d;a[5]=b[5]*d;a[6]=b[6]*d;a[7]=b[7]*d;a[8]=b[8]*e;a[9]=b[9]*e;a[10]=b[10]*e;a[11]=b[11]*e;a[12]=b[12];a[13]=b[13];a[14]=b[14];a[15]=b[15];return a},rotate:function(b,e,a,c){var d=a[0],f=a[1];a=a[2];var g=Math.sqrt(d*d+f*f+a*a),h,j,k,l,m,n,r,q,s,t,u,w,B,z,A,x,y,C,D,E;if(!g)return null;1!==g&&(g=1/g,d*=g,f*=g,a*=g);h=Math.sin(e);j=Math.cos(e);k=1-j;e=b[0];g=b[1];l=b[2];m=b[3];n=b[4];r=b[5];q=b[6];s=b[7];t=b[8];u=b[9];w= +b[10];B=b[11];z=d*d*k+j;A=f*d*k+a*h;x=a*d*k-f*h;y=d*f*k-a*h;C=f*f*k+j;D=a*f*k+d*h;E=d*a*k+f*h;d=f*a*k-d*h;f=a*a*k+j;c?b!==c&&(c[12]=b[12],c[13]=b[13],c[14]=b[14],c[15]=b[15]):c=b;c[0]=e*z+n*A+t*x;c[1]=g*z+r*A+u*x;c[2]=l*z+q*A+w*x;c[3]=m*z+s*A+B*x;c[4]=e*y+n*C+t*D;c[5]=g*y+r*C+u*D;c[6]=l*y+q*C+w*D;c[7]=m*y+s*C+B*D;c[8]=e*E+n*d+t*f;c[9]=g*E+r*d+u*f;c[10]=l*E+q*d+w*f;c[11]=m*E+s*d+B*f;return c},rotateX:function(b,e,a){var c=Math.sin(e);e=Math.cos(e);var d=b[4],f=b[5],g=b[6],h=b[7],j=b[8],k=b[9],l=b[10], +m=b[11];a?b!==a&&(a[0]=b[0],a[1]=b[1],a[2]=b[2],a[3]=b[3],a[12]=b[12],a[13]=b[13],a[14]=b[14],a[15]=b[15]):a=b;a[4]=d*e+j*c;a[5]=f*e+k*c;a[6]=g*e+l*c;a[7]=h*e+m*c;a[8]=d*-c+j*e;a[9]=f*-c+k*e;a[10]=g*-c+l*e;a[11]=h*-c+m*e;return a},rotateY:function(b,e,a){var c=Math.sin(e);e=Math.cos(e);var d=b[0],f=b[1],g=b[2],h=b[3],j=b[8],k=b[9],l=b[10],m=b[11];a?b!==a&&(a[4]=b[4],a[5]=b[5],a[6]=b[6],a[7]=b[7],a[12]=b[12],a[13]=b[13],a[14]=b[14],a[15]=b[15]):a=b;a[0]=d*e+j*-c;a[1]=f*e+k*-c;a[2]=g*e+l*-c;a[3]=h* +e+m*-c;a[8]=d*c+j*e;a[9]=f*c+k*e;a[10]=g*c+l*e;a[11]=h*c+m*e;return a},rotateZ:function(b,e,a){var c=Math.sin(e);e=Math.cos(e);var d=b[0],f=b[1],g=b[2],h=b[3],j=b[4],k=b[5],l=b[6],m=b[7];a?b!==a&&(a[8]=b[8],a[9]=b[9],a[10]=b[10],a[11]=b[11],a[12]=b[12],a[13]=b[13],a[14]=b[14],a[15]=b[15]):a=b;a[0]=d*e+j*c;a[1]=f*e+k*c;a[2]=g*e+l*c;a[3]=h*e+m*c;a[4]=d*-c+j*e;a[5]=f*-c+k*e;a[6]=g*-c+l*e;a[7]=h*-c+m*e;return a},frustum:function(b,e,a,c,d,f,g){g||(g=s.create());var h=e-b,j=c-a,k=f-d;g[0]=2*d/h;g[1]=0; +g[2]=0;g[3]=0;g[4]=0;g[5]=2*d/j;g[6]=0;g[7]=0;g[8]=(e+b)/h;g[9]=(c+a)/j;g[10]=-(f+d)/k;g[11]=-1;g[12]=0;g[13]=0;g[14]=-(2*f*d)/k;g[15]=0;return g},perspective:function(b,e,a,c,d){b=a*Math.tan(b*Math.PI/360);e*=b;return s.frustum(-e,e,-b,b,a,c,d)},ortho:function(b,a,c,d,f,g,h){h||(h=s.create());var j=a-b,k=d-c,l=g-f;h[0]=2/j;h[1]=0;h[2]=0;h[3]=0;h[4]=0;h[5]=2/k;h[6]=0;h[7]=0;h[8]=0;h[9]=0;h[10]=-2/l;h[11]=0;h[12]=-(b+a)/j;h[13]=-(d+c)/k;h[14]=-(g+f)/l;h[15]=1;return h},lookAt:function(b,a,c,d){d|| +(d=s.create());var f,g,h,j,k,l,m,n,r=b[0],u=b[1];b=b[2];h=c[0];j=c[1];g=c[2];m=a[0];c=a[1];f=a[2];if(r===m&&u===c&&b===f)return s.identity(d);a=r-m;c=u-c;m=b-f;n=1/Math.sqrt(a*a+c*c+m*m);a*=n;c*=n;m*=n;f=j*m-g*c;g=g*a-h*m;h=h*c-j*a;(n=Math.sqrt(f*f+g*g+h*h))?(n=1/n,f*=n,g*=n,h*=n):h=g=f=0;j=c*h-m*g;k=m*f-a*h;l=a*g-c*f;(n=Math.sqrt(j*j+k*k+l*l))?(n=1/n,j*=n,k*=n,l*=n):l=k=j=0;d[0]=f;d[1]=j;d[2]=a;d[3]=0;d[4]=g;d[5]=k;d[6]=c;d[7]=0;d[8]=h;d[9]=l;d[10]=m;d[11]=0;d[12]=-(f*r+g*u+h*b);d[13]=-(j*r+k*u+ +l*b);d[14]=-(a*r+c*u+m*b);d[15]=1;return d},fromRotationTranslation:function(b,a,c){c||(c=s.create());var d=b[0],f=b[1],g=b[2],h=b[3],j=d+d,k=f+f,l=g+g;b=d*j;var m=d*k,d=d*l,n=f*k,f=f*l,g=g*l,j=h*j,k=h*k,h=h*l;c[0]=1-(n+g);c[1]=m+h;c[2]=d-k;c[3]=0;c[4]=m-h;c[5]=1-(b+g);c[6]=f+j;c[7]=0;c[8]=d+k;c[9]=f-j;c[10]=1-(b+n);c[11]=0;c[12]=a[0];c[13]=a[1];c[14]=a[2];c[15]=1;return c},str:function(b){return"["+b[0]+", "+b[1]+", "+b[2]+", "+b[3]+", "+b[4]+", "+b[5]+", "+b[6]+", "+b[7]+", "+b[8]+", "+b[9]+", "+ +b[10]+", "+b[11]+", "+b[12]+", "+b[13]+", "+b[14]+", "+b[15]+"]"}},l={create:function(b){var a=new j(4);b?(a[0]=b[0],a[1]=b[1],a[2]=b[2],a[3]=b[3]):a[0]=a[1]=a[2]=a[3]=0;return a},createFrom:function(b,a,c,d){var f=new j(4);f[0]=b;f[1]=a;f[2]=c;f[3]=d;return f},set:function(b,a){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];return a},equal:function(b,a){return b===a||1E-6>Math.abs(b[0]-a[0])&&1E-6>Math.abs(b[1]-a[1])&&1E-6>Math.abs(b[2]-a[2])&&1E-6>Math.abs(b[3]-a[3])},identity:function(b){b||(b=l.create()); +b[0]=0;b[1]=0;b[2]=0;b[3]=1;return b}},E=l.identity();l.calculateW=function(b,a){var c=b[0],d=b[1],f=b[2];if(!a||b===a)return b[3]=-Math.sqrt(Math.abs(1-c*c-d*d-f*f)),b;a[0]=c;a[1]=d;a[2]=f;a[3]=-Math.sqrt(Math.abs(1-c*c-d*d-f*f));return a};l.dot=function(b,a){return b[0]*a[0]+b[1]*a[1]+b[2]*a[2]+b[3]*a[3]};l.inverse=function(b,a){var c=b[0],d=b[1],f=b[2],g=b[3],c=(c=c*c+d*d+f*f+g*g)?1/c:0;if(!a||b===a)return b[0]*=-c,b[1]*=-c,b[2]*=-c,b[3]*=c,b;a[0]=-b[0]*c;a[1]=-b[1]*c;a[2]=-b[2]*c;a[3]=b[3]*c; +return a};l.conjugate=function(b,a){if(!a||b===a)return b[0]*=-1,b[1]*=-1,b[2]*=-1,b;a[0]=-b[0];a[1]=-b[1];a[2]=-b[2];a[3]=b[3];return a};l.length=function(b){var a=b[0],c=b[1],d=b[2];b=b[3];return Math.sqrt(a*a+c*c+d*d+b*b)};l.normalize=function(b,a){a||(a=b);var c=b[0],d=b[1],f=b[2],g=b[3],h=Math.sqrt(c*c+d*d+f*f+g*g);if(0===h)return a[0]=0,a[1]=0,a[2]=0,a[3]=0,a;h=1/h;a[0]=c*h;a[1]=d*h;a[2]=f*h;a[3]=g*h;return a};l.add=function(b,a,c){if(!c||b===c)return b[0]+=a[0],b[1]+=a[1],b[2]+=a[2],b[3]+= +a[3],b;c[0]=b[0]+a[0];c[1]=b[1]+a[1];c[2]=b[2]+a[2];c[3]=b[3]+a[3];return c};l.multiply=function(b,a,c){c||(c=b);var d=b[0],f=b[1],g=b[2];b=b[3];var h=a[0],j=a[1],k=a[2];a=a[3];c[0]=d*a+b*h+f*k-g*j;c[1]=f*a+b*j+g*h-d*k;c[2]=g*a+b*k+d*j-f*h;c[3]=b*a-d*h-f*j-g*k;return c};l.multiplyVec3=function(b,a,c){c||(c=a);var d=a[0],f=a[1],g=a[2];a=b[0];var h=b[1],j=b[2];b=b[3];var k=b*d+h*g-j*f,l=b*f+j*d-a*g,m=b*g+a*f-h*d,d=-a*d-h*f-j*g;c[0]=k*b+d*-a+l*-j-m*-h;c[1]=l*b+d*-h+m*-a-k*-j;c[2]=m*b+d*-j+k*-h-l*-a; +return c};l.scale=function(b,a,c){if(!c||b===c)return b[0]*=a,b[1]*=a,b[2]*=a,b[3]*=a,b;c[0]=b[0]*a;c[1]=b[1]*a;c[2]=b[2]*a;c[3]=b[3]*a;return c};l.toMat3=function(b,a){a||(a=x.create());var c=b[0],d=b[1],f=b[2],g=b[3],h=c+c,j=d+d,k=f+f,l=c*h,m=c*j,c=c*k,n=d*j,d=d*k,f=f*k,h=g*h,j=g*j,g=g*k;a[0]=1-(n+f);a[1]=m+g;a[2]=c-j;a[3]=m-g;a[4]=1-(l+f);a[5]=d+h;a[6]=c+j;a[7]=d-h;a[8]=1-(l+n);return a};l.toMat4=function(b,a){a||(a=s.create());var c=b[0],d=b[1],f=b[2],g=b[3],h=c+c,j=d+d,k=f+f,l=c*h,m=c*j,c=c* +k,n=d*j,d=d*k,f=f*k,h=g*h,j=g*j,g=g*k;a[0]=1-(n+f);a[1]=m+g;a[2]=c-j;a[3]=0;a[4]=m-g;a[5]=1-(l+f);a[6]=d+h;a[7]=0;a[8]=c+j;a[9]=d-h;a[10]=1-(l+n);a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a};l.slerp=function(b,a,c,d){d||(d=b);var f=b[0]*a[0]+b[1]*a[1]+b[2]*a[2]+b[3]*a[3],g,h;if(1<=Math.abs(f))return d!==b&&(d[0]=b[0],d[1]=b[1],d[2]=b[2],d[3]=b[3]),d;g=Math.acos(f);h=Math.sqrt(1-f*f);if(0.0010>Math.abs(h))return d[0]=0.5*b[0]+0.5*a[0],d[1]=0.5*b[1]+0.5*a[1],d[2]=0.5*b[2]+0.5*a[2],d[3]=0.5*b[3]+ +0.5*a[3],d;f=Math.sin((1-c)*g)/h;c=Math.sin(c*g)/h;d[0]=b[0]*f+a[0]*c;d[1]=b[1]*f+a[1]*c;d[2]=b[2]*f+a[2]*c;d[3]=b[3]*f+a[3]*c;return d};l.fromRotationMatrix=function(b,a){a||(a=l.create());var c=b[0]+b[4]+b[8],d;if(0b[0]&&(c=1);b[8]>b[3*c+c]&&(c=2);var f=d[c],g=d[f];d=Math.sqrt(b[3*c+c]-b[3*f+f]-b[3*g+g]+1);a[c]=0.5*d;d= +0.5/d;a[3]=(b[3*g+f]-b[3*f+g])*d;a[f]=(b[3*f+c]+b[3*c+f])*d;a[g]=(b[3*g+c]+b[3*c+g])*d}return a};x.toQuat4=l.fromRotationMatrix;var D=x.create();l.fromAxes=function(b,a,c,d){D[0]=a[0];D[3]=a[1];D[6]=a[2];D[1]=c[0];D[4]=c[1];D[7]=c[2];D[2]=b[0];D[5]=b[1];D[8]=b[2];return l.fromRotationMatrix(D,d)};l.identity=function(b){b||(b=l.create());b[0]=0;b[1]=0;b[2]=0;b[3]=1;return b};l.fromAngleAxis=function(b,a,c){c||(c=l.create());b*=0.5;var d=Math.sin(b);c[3]=Math.cos(b);c[0]=d*a[0];c[1]=d*a[1];c[2]=d*a[2]; +return c};l.toAngleAxis=function(b,a){a||(a=b);var c=b[0]*b[0]+b[1]*b[1]+b[2]*b[2];0Math.abs(b[0]-a[0])&&1E-6>Math.abs(b[1]-a[1])},negate:function(b,a){a||(a=b); +a[0]=-b[0];a[1]=-b[1];return a},normalize:function(b,a){a||(a=b);var c=b[0]*b[0]+b[1]*b[1];0 +Math.abs(a[0]-c[0])&&1E-6>Math.abs(a[1]-c[1])&&1E-6>Math.abs(a[2]-c[2])&&1E-6>Math.abs(a[3]-c[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,c){if(!c||a===c){var d=a[1];a[1]=a[2];a[2]=d;return a}c[0]=a[0];c[1]=a[2];c[2]=a[1];c[3]=a[3];return c},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,c){c||(c=a);var d=a[0],f=a[1],g=a[2],h=a[3],j=d*h-g*f;if(!j)return null;j=1/j;c[0]=h*j;c[1]=-f*j;c[2]=-g*j;c[3]=d*j;return c},multiply:function(a, +c,d){d||(d=a);var f=a[0],g=a[1],h=a[2];a=a[3];d[0]=f*c[0]+g*c[2];d[1]=f*c[1]+g*c[3];d[2]=h*c[0]+a*c[2];d[3]=h*c[1]+a*c[3];return d},rotate:function(a,c,d){d||(d=a);var f=a[0],g=a[1],h=a[2];a=a[3];var j=Math.sin(c);c=Math.cos(c);d[0]=f*c+g*j;d[1]=f*-j+g*c;d[2]=h*c+a*j;d[3]=h*-j+a*c;return d},multiplyVec2:function(a,c,d){d||(d=c);var f=c[0];c=c[1];d[0]=f*a[0]+c*a[1];d[1]=f*a[2]+c*a[3];return d},scale:function(a,c,d){d||(d=a);var f=a[1],g=a[2],h=a[3],j=c[0];c=c[1];d[0]=a[0]*j;d[1]=f*c;d[2]=g*j;d[3]= +h*c;return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var c=new j(4);a?(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]):(c[0]=0,c[1]=0,c[2]=0,c[3]=0);return c},createFrom:function(a,c,d,f){var g=new j(4);g[0]=a;g[1]=c;g[2]=d;g[3]=f;return g},add:function(a,c,d){d||(d=c);d[0]=a[0]+c[0];d[1]=a[1]+c[1];d[2]=a[2]+c[2];d[3]=a[3]+c[3];return d},subtract:function(a,c,d){d||(d=c);d[0]=a[0]-c[0];d[1]=a[1]-c[1];d[2]=a[2]-c[2];d[3]=a[3]-c[3];return d},multiply:function(a, +c,d){d||(d=c);d[0]=a[0]*c[0];d[1]=a[1]*c[1];d[2]=a[2]*c[2];d[3]=a[3]*c[3];return d},divide:function(a,c,d){d||(d=c);d[0]=a[0]/c[0];d[1]=a[1]/c[1];d[2]=a[2]/c[2];d[3]=a[3]/c[3];return d},scale:function(a,c,d){d||(d=a);d[0]=a[0]*c;d[1]=a[1]*c;d[2]=a[2]*c;d[3]=a[3]*c;return d},set:function(a,c){c[0]=a[0];c[1]=a[1];c[2]=a[2];c[3]=a[3];return c},equal:function(a,c){return a===c||1E-6>Math.abs(a[0]-c[0])&&1E-6>Math.abs(a[1]-c[1])&&1E-6>Math.abs(a[2]-c[2])&&1E-6>Math.abs(a[3]-c[3])},negate:function(a,c){c|| +(c=a);c[0]=-a[0];c[1]=-a[1];c[2]=-a[2];c[3]=-a[3];return c},length:function(a){var c=a[0],d=a[1],f=a[2];a=a[3];return Math.sqrt(c*c+d*d+f*f+a*a)},squaredLength:function(a){var c=a[0],d=a[1],f=a[2];a=a[3];return c*c+d*d+f*f+a*a},lerp:function(a,c,d,f){f||(f=a);f[0]=a[0]+d*(c[0]-a[0]);f[1]=a[1]+d*(c[1]-a[1]);f[2]=a[2]+d*(c[2]-a[2]);f[3]=a[3]+d*(c[3]-a[3]);return f},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};a&&(a.glMatrixArrayType=j,a.MatrixArray=j,a.setMatrixArrayType=c,a.determineMatrixArrayType= +f,a.glMath=d,a.vec2=L,a.vec3=k,a.vec4=M,a.mat2=K,a.mat3=x,a.mat4=s,a.quat4=l);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:d,vec2:L,vec3:k,vec4:M,mat2:K,mat3:x,mat4:s,quat4:l}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"]; PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"]; -PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;na.length)){var c=this.uvs,f=this.indices,d=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;d[0]=1;d[1]=1;f[0]=0;f[1]=1;for(var a=a.length,g=1;ga.length)){var c=this.verticies,f=a[0],d,g=d=0,h=a[0];this.count-=0.2;c[0]=h.x+d;c[1]=h.y+g;c[2]=h.x-d;c[3]=h.y-g;for(var j=a.length,k=1;kk&&c.xk&&c.y< +k+h.height))return a.local.x=c.x,a.local.y=c.y,h}}return null}; +PIXI.InteractionManager.prototype.onMouseMove=function(a){a.preventDefault();var c=this.target.view.getBoundingClientRect();this.mouse.global.x=(a.clientX-c.left)*(this.target.width/c.width);this.mouse.global.y=(a.clientY-c.top)*(this.target.height/c.height);a=this.hitTest(this.mouse);this.currentOver!=a&&(this.currentOver&&(this.currentOver.mouseout&&this.currentOver.mouseout(this.mouse),this.currentOver=null),this.target.view.style.cursor="default");a&&this.currentOver!=a&&(this.currentOver=a,this.target.view.style.cursor= +"pointer",a.mouseover&&a.mouseover(this.mouse))};PIXI.InteractionManager.prototype.onMouseDown=function(a){var c=this.target.view.getBoundingClientRect();this.mouse.global.x=(a.clientX-c.left)*(this.target.width/c.width);this.mouse.global.y=(a.clientY-c.top)*(this.target.height/c.height);if(a=this.hitTest(this.mouse))this.currentDown=a,a.mousedown&&a.mousedown(this.mouse)}; +PIXI.InteractionManager.prototype.onMouseUp=function(){this.currentDown&&(this.currentDown.mouseup&&this.currentDown.mouseup(this.mouse),this.currentOver==this.currentDown&&this.currentDown.click&&this.currentDown.click(this.mouse),this.currentDown=null)}; +PIXI.InteractionManager.prototype.onTouchMove=function(a){a.preventDefault();var c=this.target.view.getBoundingClientRect();a=a.changedTouches;for(var f=0;f - + diff --git a/docs/api.js b/docs/api.js index ac07693..f7042d5 100644 --- a/docs/api.js +++ b/docs/api.js @@ -6,6 +6,8 @@ YUI.add("yuidoc-meta", function(Y) { "CanvasRenderer", "DisplayObject", "DisplayObjectContainer", + "InteractionData", + "InteractionManager", "MovieClip", "Point", "Rectangle", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 01ee229..502038b 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -15,11 +15,11 @@
-

+

- API Docs for: 0.9 + API Docs for: 1.0
@@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index 1ad6430..09b2df8 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index f5329ad..924ddeb 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • @@ -265,7 +269,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - pixi/renderers/CanvasRenderer.js:56 + pixi/renderers/CanvasRenderer.js:57

    @@ -341,7 +345,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - pixi/renderers/CanvasRenderer.js:45 + pixi/renderers/CanvasRenderer.js:46

    @@ -385,7 +389,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - pixi/renderers/CanvasRenderer.js:21 + pixi/renderers/CanvasRenderer.js:22

    @@ -431,7 +435,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - pixi/renderers/CanvasRenderer.js:31 + pixi/renderers/CanvasRenderer.js:32

    @@ -475,7 +479,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - pixi/renderers/CanvasRenderer.js:14 + pixi/renderers/CanvasRenderer.js:15

    diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 2474970..151abad 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • @@ -321,6 +325,12 @@ +
  • + + view + +
  • + )
    @@ -403,6 +413,21 @@ WebGL is the preferred renderer as it is a lot fastest. If webGL is not supporte +
  • + + view + Canvas + + + + +
    +

    the canvas to use as a view, optional

    +
    + + +
  • +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index b338d19..3b5e3eb 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html new file mode 100644 index 0000000..4ad5592 --- /dev/null +++ b/docs/classes/InteractionData.html @@ -0,0 +1,369 @@ + + + + + InteractionData - Pixi.js API + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    InteractionData Class

    +
    + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    InteractionData

    + + + () + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + pixi/InteractionManager.js:319 + +

    + + + + + +
    + +
    + +
    + + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + +
    +

    Properties

    + + +
    + + + + + +
    + + + + +
    +

    Properties

    + + +
    +

    global

    + Point + + + + + + + + + +
    + + + +

    + + Defined in + + + + + pixi/InteractionManager.js:325 + +

    + + + + +
    + +
    +

    This point stores the global coords of where the touch/mouse event happened

    +
    + + + + + + +
    + + +
    +

    local

    + Point + + + + + + + + + +
    + + + +

    + + Defined in + + + + + pixi/InteractionManager.js:332 + +

    + + + + +
    + +
    +

    This point stores the local coords of where the touch/mouse event happened

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html new file mode 100644 index 0000000..162bc5f --- /dev/null +++ b/docs/classes/InteractionManager.html @@ -0,0 +1,594 @@ + + + + + InteractionManager - Pixi.js API + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    InteractionManager Class

    +
    + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The interaction manager deals with mouse and touch events. At this moment only Sprite's can be interactive. +This manager also supports multitouch.

    +
    + + +
    +

    Constructor

    +
    +

    InteractionManager

    + + +
    + (
      + +
    • + + stage + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + pixi/InteractionManager.js:7 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + stage + Stage + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    disableMouseOver

    + + + () + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + pixi/InteractionManager.js:53 + +

    + + + + + +
    + +
    +

    This method will disable rollover/rollout for ALL interactive items +You may wish to use this an optimization if your app does not require rollover/rollout funcitonality

    +
    + + + + + + +
    + + +
    +

    enableMouseOver

    + + + () + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + pixi/InteractionManager.js:66 + +

    + + + + + +
    + +
    +

    This method will enable rollover/rollout for ALL interactive items +It is enabled by default

    +
    + + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    mouse

    + InteractionData + + + + + + + + + +
    + + + +

    + + Defined in + + + + + pixi/InteractionManager.js:30 + +

    + + + + +
    + +
    +

    the mouse data

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + + +

    + + Defined in + + + + + pixi/InteractionManager.js:17 + +

    + + + + +
    + +
    +

    a refference to the stage

    +
    + + + + + + +
    + + +
    +

    touchs

    + Object + + + + + + + + + +
    + + + +

    + + Defined in + + + + + pixi/InteractionManager.js:37 + +

    + + + + +
    + +
    +

    an object that stores current touches (InteractionData) by id reference

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index fae1b3f..2e6941c 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • @@ -269,6 +273,13 @@ + + +
  • + click + + +
  • @@ -283,6 +294,34 @@ +
  • + +
  • + mousedown + + + +
  • + +
  • + mouseout + + + +
  • + +
  • + mouseover + + + +
  • + +
  • + mouseup + + +
  • @@ -297,6 +336,13 @@ +
  • + +
  • + setInteractive + + +
  • @@ -311,6 +357,27 @@ +
  • + +
  • + tap + + + +
  • + +
  • + touchend + + + +
  • + +
  • + touchstart + + +
  • @@ -642,6 +709,90 @@ +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + pixi/Sprite.js:86 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the sprite with thier mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + +
    @@ -816,6 +967,343 @@ +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + pixi/Sprite.js:92 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + pixi/Sprite.js:111 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + pixi/Sprite.js:105 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + pixi/Sprite.js:98 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the sprite +for this callback to be fired the mouse must have been pressed down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + +
    @@ -954,6 +1442,90 @@ +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + pixi/Sprite.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + +
    @@ -996,7 +1568,7 @@ - pixi/Sprite.js:79 + pixi/Sprite.js:146

    @@ -1092,6 +1664,260 @@ +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + pixi/Sprite.js:121 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with thier finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + pixi/Sprite.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the sprite +for this callback to be fired. The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + Sprite: + + + + pixi/Sprite.js:128 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7a2de00..033b9c6 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index 6c64a53..81aac51 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index 92e7512..b0f2101 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • @@ -269,6 +273,13 @@ + + +
  • + click + + +
  • @@ -287,6 +298,34 @@ static +
  • + +
  • + mousedown + + + +
  • + +
  • + mouseout + + + +
  • + +
  • + mouseover + + + +
  • + +
  • + mouseup + + +
  • @@ -294,6 +333,13 @@ +
  • + +
  • + setInteractive + + +
  • @@ -301,6 +347,27 @@ +
  • + +
  • + tap + + + +
  • + +
  • + touchend + + + +
  • + +
  • + touchstart + + +
  • @@ -604,6 +671,93 @@ +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + pixi/Sprite.js:86 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the sprite with thier mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + +
    @@ -655,7 +809,7 @@ - pixi/Sprite.js:111 + pixi/Sprite.js:189

    @@ -666,7 +820,7 @@
    -

    Helper function that creates a sprite that will contain a texture from the TextureCache based on tjhe frameId +

    Helper function that creates a sprite that will contain a texture from the TextureCache based on the frameId The frame ids are created when a Texture packer file has been loaded

    @@ -762,7 +916,7 @@ - pixi/Sprite.js:127 + pixi/Sprite.js:205

    @@ -818,6 +972,355 @@ +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + pixi/Sprite.js:92 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + pixi/Sprite.js:111 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + pixi/Sprite.js:105 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + pixi/Sprite.js:98 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the sprite +for this callback to be fired the mouse must have been pressed down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + +
    @@ -902,6 +1405,93 @@ + + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + pixi/Sprite.js:164 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + +
    @@ -947,7 +1537,7 @@ - pixi/Sprite.js:79 + pixi/Sprite.js:146

    @@ -989,6 +1579,269 @@ + + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + pixi/Sprite.js:121 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with thier finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + pixi/Sprite.js:134 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the sprite +for this callback to be fired. The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + pixi/Sprite.js:128 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index a9ed7b3..dd3f111 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index d304cc2..ec59d87 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • @@ -157,6 +161,12 @@ +
  • + + interactive + +
  • + )
    @@ -221,6 +231,21 @@ +
  • + + interactive + Boolean + + + + +
    +

    enable / disable interaction (default is false)

    +
    + + +
  • +
    @@ -687,7 +712,7 @@ - pixi/Stage.js:44 + pixi/Stage.js:59

    @@ -764,7 +789,7 @@ - pixi/Stage.js:30 + pixi/Stage.js:35

    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 48980dc..94ae696 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • @@ -801,6 +805,10 @@ + + Texture + + @@ -865,6 +873,19 @@ +
    +

    Returns:

    + +
    + + + Texture: + + the texture that was removed + +
    +
    +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 2db06c7..0d33af9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index ddeebf2..9b466c3 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • @@ -160,6 +164,12 @@ Dont forget to add the view to your DOM or you will not see anything :)

    +
  • + + view + +
  • + )
    @@ -239,6 +249,21 @@ Dont forget to add the view to your DOM or you will not see anything :)

    +
  • + + view + Canvas + + + + +
    +

    the canvas to use as a view, optional

    +
    + + +
  • +
    @@ -345,7 +370,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - pixi/renderers/WebGLRenderer.js:157 + pixi/renderers/WebGLRenderer.js:158

    @@ -438,7 +463,7 @@ Dont forget to add the view to your DOM or you will not see anything :)

    - pixi/renderers/WebGLRenderer.js:526 + pixi/renderers/WebGLRenderer.js:538

    diff --git a/docs/data.json b/docs/data.json index 246ea87..5e94f50 100644 --- a/docs/data.json +++ b/docs/data.json @@ -1,9 +1,9 @@ { "project": { "name": "Pixi.js API", - "logo": "../logo_small.png", - "description": "The Foo API: a library for doing X, Y, and Z", - "version": "0.9", + "logo": "http://www.goodboydigital.com/pixijs/logo_small.png", + "description": "Pixi.js is a fast lightweight 2D library that works across all devices.", + "version": "1.0", "url": "http://goodboydigital.com/" }, "files": { @@ -130,6 +130,16 @@ "fors": {}, "namespaces": {} }, + "pixi/InteractionManager.js": { + "name": "pixi/InteractionManager.js", + "modules": {}, + "classes": { + "InteractionManager": 1, + "InteractionData": 1 + }, + "fors": {}, + "namespaces": {} + }, "pixi/MovieClip.js": { "name": "pixi/MovieClip.js", "modules": {}, @@ -199,6 +209,8 @@ "Texture": 1, "DisplayObject": 1, "DisplayObjectContainer": 1, + "InteractionManager": 1, + "InteractionData": 1, "MovieClip": 1, "Point": 1, "Rectangle": 1, @@ -279,6 +291,11 @@ "name": "height", "description": "the height of the canvas view", "type": "Number" + }, + { + "name": "view", + "description": "the canvas to use as a view, optional", + "type": "Canvas" } ] }, @@ -328,6 +345,11 @@ "name": "height", "description": "the height of the canvas view", "type": "Number" + }, + { + "name": "view", + "description": "the canvas to use as a view, optional", + "type": "Canvas" } ], "default": "0" @@ -410,6 +432,41 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "InteractionManager": { + "name": "InteractionManager", + "shortname": "InteractionManager", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "pixi/InteractionManager.js", + "line": 7, + "description": "The interaction manager deals with mouse and touch events. At this moment only Sprite's can be interactive.\nThis manager also supports multitouch.", + "is_constructor": 1, + "params": [ + { + "name": "stage", + "description": "", + "type": "Stage" + } + ], + "type": "Stage" + }, + "InteractionData": { + "name": "InteractionData", + "shortname": "InteractionData", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "pixi/InteractionManager.js", + "line": 319, + "is_constructor": 1 + }, "MovieClip": { "name": "MovieClip", "shortname": "MovieClip", @@ -539,6 +596,11 @@ "name": "backgroundColor", "description": "the background color of the stage", "type": "Number" + }, + { + "name": "interactive", + "description": "enable / disable interaction (default is false)", + "type": "Boolean" } ] } @@ -613,7 +675,7 @@ }, { "file": "pixi/renderers/CanvasRenderer.js", - "line": 14, + "line": 15, "description": "The width of the canvas view", "itemtype": "property", "name": "width", @@ -623,7 +685,7 @@ }, { "file": "pixi/renderers/CanvasRenderer.js", - "line": 21, + "line": 22, "description": "The height of the canvas view", "itemtype": "property", "name": "height", @@ -633,7 +695,7 @@ }, { "file": "pixi/renderers/CanvasRenderer.js", - "line": 31, + "line": 32, "description": "The canvas element that the everything is drawn to", "itemtype": "property", "name": "view", @@ -642,7 +704,7 @@ }, { "file": "pixi/renderers/CanvasRenderer.js", - "line": 45, + "line": 46, "description": "The canvas context that the everything is drawn to", "itemtype": "property", "name": "context", @@ -651,7 +713,7 @@ }, { "file": "pixi/renderers/CanvasRenderer.js", - "line": 56, + "line": 57, "description": "Renders the stage to its canvas view", "itemtype": "method", "name": "render", @@ -666,7 +728,7 @@ }, { "file": "pixi/renderers/CanvasRenderer.js", - "line": 83, + "line": 96, "description": "resizes the canvas view to the specified width and height", "params": [ { @@ -682,21 +744,21 @@ }, { "file": "pixi/renderers/CanvasRenderer.js", - "line": 97, + "line": 110, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "pixi/renderers/CanvasRenderer.js", - "line": 167, + "line": 180, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "pixi/renderers/CanvasRenderer.js", - "line": 202, + "line": 215, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -877,21 +939,21 @@ }, { "file": "pixi/renderers/WebGLRenderer.js", - "line": 64, + "line": 65, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "pixi/renderers/WebGLRenderer.js", - "line": 103, + "line": 104, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "pixi/renderers/WebGLRenderer.js", - "line": 157, + "line": 158, "description": "Renders the stage to its webGL view", "itemtype": "method", "name": "render", @@ -906,28 +968,28 @@ }, { "file": "pixi/renderers/WebGLRenderer.js", - "line": 223, + "line": 235, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "pixi/renderers/WebGLRenderer.js", - "line": 252, + "line": 264, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "pixi/renderers/WebGLRenderer.js", - "line": 448, + "line": 460, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "pixi/renderers/WebGLRenderer.js", - "line": 526, + "line": 538, "description": "resizes the webGL view to the specified width and height", "itemtype": "method", "name": "resize", @@ -947,28 +1009,28 @@ }, { "file": "pixi/renderers/WebGLRenderer.js", - "line": 547, + "line": 559, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "pixi/renderers/WebGLRenderer.js", - "line": 575, + "line": 587, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "pixi/renderers/WebGLRenderer.js", - "line": 653, + "line": 665, "access": "private", "tagname": "", "class": "WebGLRenderer" }, { "file": "pixi/renderers/WebGLRenderer.js", - "line": 662, + "line": 674, "access": "private", "tagname": "", "class": "WebGLRenderer" @@ -1140,6 +1202,10 @@ "type": "String" } ], + "return": { + "description": "the texture that was removed", + "type": "Texture" + }, "class": "Texture" }, { @@ -1165,6 +1231,11 @@ "name": "height", "description": "the height of the renderers view", "type": "Number" + }, + { + "name": "view", + "description": "the canvas to use as a view, optional", + "type": "Canvas" } ], "class": "DisplayObject" @@ -1258,7 +1329,7 @@ }, { "file": "pixi/DisplayObject.js", - "line": 79, + "line": 82, "access": "private", "tagname": "", "class": "DisplayObject" @@ -1335,6 +1406,73 @@ "tagname": "", "class": "DisplayObjectContainer" }, + { + "file": "pixi/InteractionManager.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "InteractionManager" + }, + { + "file": "pixi/InteractionManager.js", + "line": 17, + "description": "a refference to the stage", + "itemtype": "property", + "name": "stage", + "type": "Stage", + "class": "InteractionManager" + }, + { + "file": "pixi/InteractionManager.js", + "line": 30, + "description": "the mouse data", + "itemtype": "property", + "name": "mouse", + "type": "InteractionData", + "class": "InteractionManager" + }, + { + "file": "pixi/InteractionManager.js", + "line": 37, + "description": "an object that stores current touches (InteractionData) by id reference", + "itemtype": "property", + "name": "touchs", + "type": "Object", + "class": "InteractionManager" + }, + { + "file": "pixi/InteractionManager.js", + "line": 53, + "description": "This method will disable rollover/rollout for ALL interactive items\nYou may wish to use this an optimization if your app does not require rollover/rollout funcitonality", + "itemtype": "method", + "name": "disableMouseOver", + "class": "InteractionManager" + }, + { + "file": "pixi/InteractionManager.js", + "line": 66, + "description": "This method will enable rollover/rollout for ALL interactive items\nIt is enabled by default", + "itemtype": "method", + "name": "enableMouseOver", + "class": "InteractionManager" + }, + { + "file": "pixi/InteractionManager.js", + "line": 325, + "description": "This point stores the global coords of where the touch/mouse event happened", + "itemtype": "property", + "name": "global", + "type": "Point", + "class": "InteractionData" + }, + { + "file": "pixi/InteractionManager.js", + "line": 332, + "description": "This point stores the local coords of where the touch/mouse event happened", + "itemtype": "property", + "name": "local", + "type": "Point", + "class": "InteractionData" + }, { "file": "pixi/MovieClip.js", "line": 1, @@ -1584,7 +1722,135 @@ }, { "file": "pixi/Sprite.js", - "line": 79, + "line": 86, + "description": "A callback that is used when the users clicks on the sprite with thier mouse", + "itemtype": "method", + "name": "click", + "params": [ + { + "name": "interactionData", + "description": "", + "type": "InteractionData" + } + ], + "class": "Sprite", + "module": "PIXI" + }, + { + "file": "pixi/Sprite.js", + "line": 92, + "description": "A callback that is used when the user clicks the mouse down over the sprite", + "itemtype": "method", + "name": "mousedown", + "params": [ + { + "name": "interactionData", + "description": "", + "type": "InteractionData" + } + ], + "class": "Sprite", + "module": "PIXI" + }, + { + "file": "pixi/Sprite.js", + "line": 98, + "description": "A callback that is used when the user releases the mouse that was over the sprite\nfor this callback to be fired the mouse must have been pressed down over the sprite", + "itemtype": "method", + "name": "mouseup", + "params": [ + { + "name": "interactionData", + "description": "", + "type": "InteractionData" + } + ], + "class": "Sprite", + "module": "PIXI" + }, + { + "file": "pixi/Sprite.js", + "line": 105, + "description": "A callback that is used when the users mouse rolls over the sprite", + "itemtype": "method", + "name": "mouseover", + "params": [ + { + "name": "interactionData", + "description": "", + "type": "InteractionData" + } + ], + "class": "Sprite", + "module": "PIXI" + }, + { + "file": "pixi/Sprite.js", + "line": 111, + "description": "A callback that is used when the users mouse leaves the sprite", + "itemtype": "method", + "name": "mouseout", + "params": [ + { + "name": "interactionData", + "description": "", + "type": "InteractionData" + } + ], + "class": "Sprite", + "module": "PIXI" + }, + { + "file": "pixi/Sprite.js", + "line": 121, + "description": "A callback that is used when the users taps on the sprite with thier finger\nbasically a touch version of click", + "itemtype": "method", + "name": "tap", + "params": [ + { + "name": "interactionData", + "description": "", + "type": "InteractionData" + } + ], + "class": "Sprite", + "module": "PIXI" + }, + { + "file": "pixi/Sprite.js", + "line": 128, + "description": "A callback that is used when the user touch's over the sprite", + "itemtype": "method", + "name": "touchstart", + "params": [ + { + "name": "interactionData", + "description": "", + "type": "InteractionData" + } + ], + "class": "Sprite", + "module": "PIXI" + }, + { + "file": "pixi/Sprite.js", + "line": 134, + "description": "A callback that is used when the user releases the touch that was over the sprite\nfor this callback to be fired. The touch must have started over the sprite", + "itemtype": "method", + "name": "touchend", + "params": [ + { + "name": "interactionData", + "description": "", + "type": "InteractionData" + } + ], + "class": "Sprite", + "module": "PIXI" + }, + { + "file": "pixi/Sprite.js", + "line": 146, "itemtype": "method", "name": "setTexture", "params": [ @@ -1599,7 +1865,23 @@ }, { "file": "pixi/Sprite.js", - "line": 98, + "line": 164, + "description": "Indicates if the sprite will have touch and mouse interactivity. It is false by default", + "itemtype": "method", + "name": "setInteractive", + "params": [ + { + "name": "interactive", + "description": "", + "type": "Boolean" + } + ], + "class": "Sprite", + "module": "PIXI" + }, + { + "file": "pixi/Sprite.js", + "line": 177, "access": "private", "tagname": "", "class": "Sprite", @@ -1607,8 +1889,8 @@ }, { "file": "pixi/Sprite.js", - "line": 111, - "description": "Helper function that creates a sprite that will contain a texture from the TextureCache based on tjhe frameId\n The frame ids are created when a Texture packer file has been loaded", + "line": 189, + "description": "Helper function that creates a sprite that will contain a texture from the TextureCache based on the frameId\n The frame ids are created when a Texture packer file has been loaded", "itemtype": "method", "name": "fromFrame", "static": 1, @@ -1628,7 +1910,7 @@ }, { "file": "pixi/Sprite.js", - "line": 127, + "line": 205, "description": "Helper function that creates a sprite that will contain a texture based on an image url\n If the image is not in the texture cache it will be loaded", "itemtype": "method", "name": "fromImage", @@ -1655,7 +1937,7 @@ }, { "file": "pixi/Stage.js", - "line": 30, + "line": 35, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -1664,7 +1946,7 @@ }, { "file": "pixi/Stage.js", - "line": 44, + "line": 59, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -1685,7 +1967,7 @@ }, { "message": "unknown tag: internal", - "line": " pixi/Stage.js:30" + "line": " pixi/Stage.js:35" }, { "message": "Missing item type", @@ -1717,19 +1999,19 @@ }, { "message": "Missing item type\nresizes the canvas view to the specified width and height", - "line": " pixi/renderers/CanvasRenderer.js:83" + "line": " pixi/renderers/CanvasRenderer.js:96" }, { "message": "Missing item type", - "line": " pixi/renderers/CanvasRenderer.js:97" + "line": " pixi/renderers/CanvasRenderer.js:110" }, { "message": "Missing item type", - "line": " pixi/renderers/CanvasRenderer.js:167" + "line": " pixi/renderers/CanvasRenderer.js:180" }, { "message": "Missing item type", - "line": " pixi/renderers/CanvasRenderer.js:202" + "line": " pixi/renderers/CanvasRenderer.js:215" }, { "message": "Missing item type", @@ -1761,39 +2043,39 @@ }, { "message": "Missing item type", - "line": " pixi/renderers/WebGLRenderer.js:64" + "line": " pixi/renderers/WebGLRenderer.js:65" }, { "message": "Missing item type", - "line": " pixi/renderers/WebGLRenderer.js:103" + "line": " pixi/renderers/WebGLRenderer.js:104" }, { "message": "Missing item type", - "line": " pixi/renderers/WebGLRenderer.js:223" + "line": " pixi/renderers/WebGLRenderer.js:235" }, { "message": "Missing item type", - "line": " pixi/renderers/WebGLRenderer.js:252" + "line": " pixi/renderers/WebGLRenderer.js:264" }, { "message": "Missing item type", - "line": " pixi/renderers/WebGLRenderer.js:448" + "line": " pixi/renderers/WebGLRenderer.js:460" }, { "message": "Missing item type", - "line": " pixi/renderers/WebGLRenderer.js:547" + "line": " pixi/renderers/WebGLRenderer.js:559" }, { "message": "Missing item type", - "line": " pixi/renderers/WebGLRenderer.js:575" + "line": " pixi/renderers/WebGLRenderer.js:587" }, { "message": "Missing item type", - "line": " pixi/renderers/WebGLRenderer.js:653" + "line": " pixi/renderers/WebGLRenderer.js:665" }, { "message": "Missing item type", - "line": " pixi/renderers/WebGLRenderer.js:662" + "line": " pixi/renderers/WebGLRenderer.js:674" }, { "message": "Missing item type", @@ -1829,7 +2111,7 @@ }, { "message": "Missing item type", - "line": " pixi/DisplayObject.js:79" + "line": " pixi/DisplayObject.js:82" }, { "message": "Missing item type", @@ -1839,6 +2121,10 @@ "message": "Missing item type", "line": " pixi/DisplayObjectContainer.js:126" }, + { + "message": "Missing item type", + "line": " pixi/InteractionManager.js:1" + }, { "message": "Missing item type", "line": " pixi/MovieClip.js:1" @@ -1861,7 +2147,7 @@ }, { "message": "Missing item type", - "line": " pixi/Sprite.js:98" + "line": " pixi/Sprite.js:177" }, { "message": "Missing item type", diff --git a/docs/files/pixi_DisplayObject.js.html b/docs/files/pixi_DisplayObject.js.html index 3314e86..a1d9784 100644 --- a/docs/files/pixi_DisplayObject.js.html +++ b/docs/files/pixi_DisplayObject.js.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • @@ -187,6 +191,9 @@ PIXI.DisplayObject = function() this._cr = 1; this.renderable = false; + + // NOT YET :/ This only applies to children within the container.. + this.interactive = true; } // constructor @@ -200,7 +207,7 @@ PIXI.DisplayObject.prototype.updateTransform = function() // TODO OPTIMIZE THIS!! with dirty if(this.rotation != this.rotationCache) { - this.rotationCach = this.rotation; + this.rotationCache = this.rotation; this._sr = Math.sin(this.rotation); this._cr = Math.cos(this.rotation); } diff --git a/docs/files/pixi_DisplayObjectContainer.js.html b/docs/files/pixi_DisplayObjectContainer.js.html index 3ef66ea..8083fa9 100644 --- a/docs/files/pixi_DisplayObjectContainer.js.html +++ b/docs/files/pixi_DisplayObjectContainer.js.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • @@ -134,7 +138,7 @@ PIXI.DisplayObjectContainer = function() * @property children {Array} */ this.children = []; - + //s this.renderable = false; } @@ -247,7 +251,7 @@ PIXI.DisplayObjectContainer.prototype.updateTransform = function() if(!this.visible)return; PIXI.DisplayObject.prototype.updateTransform.call( this ); - + for(var i=0,j=this.children.length; i<j; i++) { this.children[i].updateTransform(); diff --git a/docs/files/pixi_InteractionManager.js.html b/docs/files/pixi_InteractionManager.js.html new file mode 100644 index 0000000..ed46760 --- /dev/null +++ b/docs/files/pixi_InteractionManager.js.html @@ -0,0 +1,483 @@ + + + + + pixi/InteractionManager.js - Pixi.js API + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0 +
    +
    +
    + +
    + +
    +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: pixi/InteractionManager.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +
    +
    +/**
    +The interaction manager deals with mouse and touch events. At this moment only Sprite's can be interactive.
    +This manager also supports multitouch.
    +@class InteractionManager
    +@constructor
    +@param stage {Stage}
    +@type Stage
    +*/
    +PIXI.InteractionManager = function(stage)
    +{
    +	/**
    +	 * a refference to the stage
    +	 * @property stage
    +	 * @type Stage
    +	 */
    +	this.stage = stage;
    +
    +	// helpers
    +	this.tempPoint = new PIXI.Point();
    +	this.tempMatrix =  mat3.create();
    +	
    +	this.mouseoverEnabled = true;
    +	
    +	/**
    +	 * the mouse data 
    +	 * @property mouse
    +	 * @type InteractionData
    +	 */
    +	this.mouse = new PIXI.InteractionData();
    +	
    +	/**
    +	 * an object that stores current touches (InteractionData) by id reference 
    +	 * @property touchs
    +	 * @type Object
    +	 */
    +	this.touchs = {};
    +	
    +	//tiny little interactiveData pool!
    +	this.pool = [];
    +	
    +	this.interactiveItems = [];
    +}
    +
    +// constructor
    +PIXI.InteractionManager.constructor = PIXI.InteractionManager;
    +
    +/**
    + * This method will disable rollover/rollout for ALL interactive items
    + * You may wish to use this an optimization if your app does not require rollover/rollout funcitonality
    + * @method disableMouseOver
    + */
    +PIXI.InteractionManager.prototype.disableMouseOver = function()
    +{
    +	if(!this.mouseoverEnabled)return;
    +	
    +	this.mouseoverEnabled = false;
    +	if(this.target)this.target.view.removeEventListener('mousemove',  this.onMouseMove.bind(this));
    +}
    +
    +/**
    + * This method will enable rollover/rollout for ALL interactive items
    + * It is enabled by default
    + * @method enableMouseOver
    + */
    +PIXI.InteractionManager.prototype.enableMouseOver = function()
    +{
    +	if(this.mouseoverEnabled)return;
    +	
    +	this.mouseoverEnabled = false;
    +	if(this.target)this.target.view.addEventListener('mousemove',  this.onMouseMove.bind(this));
    +}
    +
    +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject)
    +{
    +	var children = displayObject.children;
    +	var length = children.length;
    +	
    +	for (var i = length - 1; i >= 0; i--)
    +	{
    +		var child = children[i];
    +		
    +		// only sprite's right now...
    +		if(child instanceof PIXI.Sprite)
    +		{
    +			if(child.interactive)this.interactiveItems.push(child);
    +		}
    +		else
    +		{
    +			// use this to optimize..
    +			if(!child.interactive)continue;
    +		}
    +		
    +		if(child.children.length > 0)
    +		{
    +			this.collectInteractiveSprite(child);
    +		}
    +	}
    +}
    +
    +PIXI.InteractionManager.prototype.setTarget = function(target)
    +{
    +	this.target = target;
    +	if(this.mouseoverEnabled)target.view.addEventListener('mousemove',  this.onMouseMove.bind(this), true);
    +	target.view.addEventListener('mousedown',  this.onMouseDown.bind(this), true);
    + 	target.view.addEventListener('mouseup', 	this.onMouseUp.bind(this), true);
    + 	target.view.addEventListener('mouseout', 	this.onMouseUp.bind(this), true);
    +	
    +	// aint no multi touch just yet!
    +	target.view.addEventListener("touchstart", this.onTouchStart.bind(this), true);
    +	target.view.addEventListener("touchend", this.onTouchEnd.bind(this), true);
    +	target.view.addEventListener("touchmove", this.onTouchMove.bind(this), true);
    +}
    +
    +PIXI.InteractionManager.prototype.hitTest = function(interactionData)
    +{
    +	if(this.dirty)
    +	{
    +		this.dirty = false;
    +		this.interactiveItems = [];
    +		// go through and collect all the objects that are interactive..
    +		this.collectInteractiveSprite(this.stage);
    +	}
    +	
    +	var tempPoint = this.tempPoint;
    +	var tempMatrix = this.tempMatrix;
    +	var global = interactionData.global;
    +	
    +	var length = this.interactiveItems.length;
    +	
    +	for (var i = 0; i < length; i++)
    +	{
    +		var item = this.interactiveItems[i];
    +		if(!item.visible)continue;
    +		
    +		// TODO this could do with some optimizing!
    +		// maybe store the inverse?
    +		// or do a lazy check first?
    +		//mat3.inverse(item.worldTransform, tempMatrix);
    +		//tempPoint.x = tempMatrix[0] * global.x + tempMatrix[1] * global.y + tempMatrix[2]; 
    +		//tempPoint.y = tempMatrix[4] * global.y + tempMatrix[3] * global.x + tempMatrix[5];
    +	
    +		// OPTIMIZED! assuming the matrix transform is affine.. which it totally shold be!
    +		
    +		var worldTransform = item.worldTransform;
    +		
    +		var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2],
    +            a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5],
    +            id = 1 / (a00 * a11 + a01 * -a10);
    +		
    +		tempPoint.x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; 
    +		tempPoint.y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id;
    +		
    +			
    +		var x1 = -item.width * item.anchor.x
    +		
    +		if(tempPoint.x > x1 && tempPoint.x < x1 + item.width)
    +		{
    +			var y1 = -item.height * item.anchor.y;
    +			
    +			if(tempPoint.y > y1 && tempPoint.y < y1 + item.height)
    +			{
    +				interactionData.local.x = tempPoint.x;
    +				interactionData.local.y = tempPoint.y;
    +				
    +				return item;
    +			}
    +		}
    +	}
    +		
    +	return null;	
    +}
    +
    +PIXI.InteractionManager.prototype.onMouseMove = function(event)
    +{
    +	event.preventDefault();
    +	
    +	// TODO optimize by not check EVERY TIME! maybe half as often? //
    +	var rect = this.target.view.getBoundingClientRect();
    +	
    +	this.mouse.global.x = (event.clientX - rect.left) * (this.target.width / rect.width);
    +	this.mouse.global.y = (event.clientY - rect.top) * ( this.target.height / rect.height);
    +	
    +	var item = this.hitTest(this.mouse);
    +	
    +	if(this.currentOver != item)
    +	{
    +		if(this.currentOver)
    +		{
    +			if(this.currentOver.mouseout)this.currentOver.mouseout(this.mouse);
    +			this.currentOver = null;
    +		}
    +		
    +		this.target.view.style.cursor = "default";
    +	}
    +		
    +	if(item)
    +	{
    +		
    +		if(this.currentOver == item)return;
    +		
    +		this.currentOver = item;
    +		this.target.view.style.cursor = "pointer";
    +		
    +		if(item.mouseover)item.mouseover(this.mouse);
    +	}
    +}
    +
    +PIXI.InteractionManager.prototype.onMouseDown = function(event)
    +{
    +	var rect = this.target.view.getBoundingClientRect();
    +	this.mouse.global.x = (event.clientX - rect.left) * (this.target.width / rect.width);
    +	this.mouse.global.y = (event.clientY - rect.top) * (this.target.height / rect.height);
    +	
    +	var item = this.hitTest(this.mouse);
    +	if(item)
    +	{
    +		this.currentDown = item;
    +		if(item.mousedown)item.mousedown(this.mouse);
    +	}
    +}
    +
    +PIXI.InteractionManager.prototype.onMouseUp = function(event)
    +{
    +	if(this.currentDown)
    +	{
    +		if(this.currentDown.mouseup)this.currentDown.mouseup(this.mouse);	
    +		
    +		if(this.currentOver == this.currentDown)if(this.currentDown.click)this.currentDown.click(this.mouse);	
    +		this.currentDown = null;
    +	}
    +}
    +
    +
    +PIXI.InteractionManager.prototype.onTouchMove = function(event)
    +{
    +	event.preventDefault();
    +	
    +	var rect = this.target.view.getBoundingClientRect();
    +	var changedTouches = event.changedTouches;
    +	
    +	for (var i=0; i < changedTouches.length; i++) 
    +	{
    +		var touchEvent = changedTouches[i];
    +		
    +		var touchData = this.touchs[touchEvent.identifier];
    +		
    +		// update the touch position
    +		touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width);
    +		touchData.global.y = (touchEvent.clientY - rect.top)  * (this.target.height / rect.height);
    +	}
    +}
    +
    +PIXI.InteractionManager.prototype.onTouchStart = function(event)
    +{
    +	event.preventDefault();
    +	var rect = this.target.view.getBoundingClientRect();
    +	var changedTouches = event.changedTouches;
    +	
    +	for (var i=0; i < changedTouches.length; i++) 
    +	{
    +		var touchEvent = changedTouches[i];
    +		
    +		var touchData = this.pool.pop();
    +		if(!touchData)touchData = new PIXI.InteractionData();
    +		
    +		this.touchs[touchEvent.identifier] = touchData;
    +		
    +		touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width);
    +		touchData.global.y = (touchEvent.clientY - rect.top)  * (this.target.height / rect.height);
    +		
    +		var item = this.hitTest(touchData);
    +		if(item)
    +		{
    +			touchData.currentDown = item;
    +			if(item.touchstart)item.touchstart(touchData);
    +		}
    +	}
    +}
    +
    +PIXI.InteractionManager.prototype.onTouchEnd = function(event)
    +{
    +	event.preventDefault();
    +	
    +	var rect = this.target.view.getBoundingClientRect();
    +	var changedTouches = event.changedTouches;
    +	
    +	for (var i=0; i < changedTouches.length; i++) 
    +	{
    +		var touchEvent = changedTouches[i];
    +		var touchData = this.touchs[touchEvent.identifier];
    +		
    +		touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width);
    +		touchData.global.y = (touchEvent.clientY - rect.top)  * (this.target.height / rect.height);
    +		
    +		if(touchData.currentDown)
    +		{
    +			if(touchData.currentDown.touchend)touchData.currentDown.touchend(touchData);
    +			
    +			var item = this.hitTest(touchData);
    +			if(item == touchData.currentDown)
    +			{
    +				if(touchData.currentDown.tap)touchData.currentDown.tap(touchData);	
    +			}
    +			touchData.currentDown = null;
    +		}
    +		
    +		// remove the touch..
    +		this.pool.push(touchData);
    +		this.touchs[touchEvent.identifier] = null;
    +	}
    +}
    +
    +/**
    +@class InteractionData
    +@constructor
    +*/
    +PIXI.InteractionData = function()
    +{
    +	/**
    +	 * This point stores the global coords of where the touch/mouse event happened
    +	 * @property global 
    +	 * @type Point
    +	 */
    +	this.global = new PIXI.Point();
    +	
    +	/**
    +	 * This point stores the local coords of where the touch/mouse event happened
    +	 * @property local 
    +	 * @type Point
    +	 */
    +	this.local = new PIXI.Point();
    +}
    +
    +// constructor
    +PIXI.InteractionData.constructor = PIXI.InteractionData;
    +
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/pixi_MovieClip.js.html b/docs/files/pixi_MovieClip.js.html index 13c7ad5..9795ab1 100644 --- a/docs/files/pixi_MovieClip.js.html +++ b/docs/files/pixi_MovieClip.js.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • diff --git a/docs/files/pixi_Pixi.js.html b/docs/files/pixi_Pixi.js.html index 1e312f2..6b9b22e 100644 --- a/docs/files/pixi_Pixi.js.html +++ b/docs/files/pixi_Pixi.js.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • diff --git a/docs/files/pixi_Point.js.html b/docs/files/pixi_Point.js.html index 6bf960a..1e27dc9 100644 --- a/docs/files/pixi_Point.js.html +++ b/docs/files/pixi_Point.js.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • diff --git a/docs/files/pixi_Rectangle.js.html b/docs/files/pixi_Rectangle.js.html index 52e0c91..e7a6b07 100644 --- a/docs/files/pixi_Rectangle.js.html +++ b/docs/files/pixi_Rectangle.js.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • diff --git a/docs/files/pixi_Sprite.js.html b/docs/files/pixi_Sprite.js.html index 1deaa9a..3f1d440 100644 --- a/docs/files/pixi_Sprite.js.html +++ b/docs/files/pixi_Sprite.js.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • @@ -186,6 +190,73 @@ PIXI.Sprite = function(texture) } this.renderable = true; + + + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + + + // thi next bit is here for the docs... + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the sprite with thier mouse + * @method click + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user clicks the mouse down over the sprite + * @method mousedown + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the sprite + * for this callback to be fired the mouse must have been pressed down over the sprite + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the sprite + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the sprite + * @method mouseout + * @param interactionData {InteractionData} + */ + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with thier finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the sprite + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the sprite + * for this callback to be fired. The touch must have started over the sprite + * @method touchend + * @param interactionData {InteractionData} + */ } // constructor @@ -208,7 +279,19 @@ PIXI.Sprite.prototype.setTexture = function(texture) this.width = texture.frame.width; this.height = texture.frame.height; this.updateFrame = true; - +} + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.Sprite.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(stage)stage.dirty = true; } /** @@ -223,10 +306,9 @@ PIXI.Sprite.prototype.onTextureUpdate = function(event) // some helper functions.. - /** * - * Helper function that creates a sprite that will contain a texture from the TextureCache based on tjhe frameId + * Helper function that creates a sprite that will contain a texture from the TextureCache based on the frameId * The frame ids are created when a Texture packer file has been loaded * @method fromFrame * @static diff --git a/docs/files/pixi_Stage.js.html b/docs/files/pixi_Stage.js.html index d127230..f3eb17a 100644 --- a/docs/files/pixi_Stage.js.html +++ b/docs/files/pixi_Stage.js.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • @@ -124,8 +128,9 @@ A Stage represents the root of the display tree. Everything connected to the sta @extends DisplayObjectContainer @constructor @param backgroundColor {Number} the background color of the stage +@param interactive {Boolean} enable / disable interaction (default is false) */ -PIXI.Stage = function(backgroundColor) +PIXI.Stage = function(backgroundColor, interactive) { PIXI.DisplayObjectContainer.call( this ); @@ -135,6 +140,10 @@ PIXI.Stage = function(backgroundColor) this.childIndex = 0; this.stage= this; + // interaction! + this.interactive = interactive ? true : false; + this.interactionManager = new PIXI.InteractionManager(this); + this.setBackgroundColor(backgroundColor); } @@ -150,11 +159,21 @@ PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); PIXI.Stage.prototype.updateTransform = function() { this.worldAlpha = 1; - + for(var i=0,j=this.children.length; i<j; i++) { this.children[i].updateTransform(); } + + if(this.dirty) + { + this.dirty = false; + + // update interactive! + this.interactionManager.dirty = true; + + + } } /** @@ -170,8 +189,8 @@ PIXI.Stage.prototype.setBackgroundColor = function(backgroundColor) PIXI.Stage.prototype.__addChild = function(child) { - //this.__childrenAdded.push(child); - + if(child.interactive)this.dirty = true; + child.stage = this; if(child.children) @@ -187,6 +206,8 @@ PIXI.Stage.prototype.__addChild = function(child) PIXI.Stage.prototype.__removeChild = function(child) { + if(child.interactive)this.dirty = true; + this.__childrenRemoved.push(child); child.stage = undefined; diff --git a/docs/files/pixi_extras_Rope.js.html b/docs/files/pixi_extras_Rope.js.html index f0ff723..eafeff0 100644 --- a/docs/files/pixi_extras_Rope.js.html +++ b/docs/files/pixi_extras_Rope.js.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • diff --git a/docs/files/pixi_extras_Strip.js.html b/docs/files/pixi_extras_Strip.js.html index 85c1c58..db3334f 100644 --- a/docs/files/pixi_extras_Strip.js.html +++ b/docs/files/pixi_extras_Strip.js.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • diff --git a/docs/files/pixi_loaders_AssetLoader.js.html b/docs/files/pixi_loaders_AssetLoader.js.html index 7cb38fe..1bcc5b9 100644 --- a/docs/files/pixi_loaders_AssetLoader.js.html +++ b/docs/files/pixi_loaders_AssetLoader.js.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • diff --git a/docs/files/pixi_loaders_SpriteSheetLoader.js.html b/docs/files/pixi_loaders_SpriteSheetLoader.js.html index 96fab87..4563921 100644 --- a/docs/files/pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/pixi_loaders_SpriteSheetLoader.js.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • diff --git a/docs/files/pixi_renderers_CanvasRenderer.js.html b/docs/files/pixi_renderers_CanvasRenderer.js.html index cfedafa..2f97655 100644 --- a/docs/files/pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/pixi_renderers_CanvasRenderer.js.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • @@ -124,8 +128,9 @@ * @class CanvasRenderer * @param width {Number} the width of the canvas view * @param height {Number} the height of the canvas view + * @param view {Canvas} the canvas to use as a view, optional */ -PIXI.CanvasRenderer = function(width, height) +PIXI.CanvasRenderer = function(width, height, view) { /** * The width of the canvas view @@ -149,7 +154,7 @@ PIXI.CanvasRenderer = function(width, height) * @property view * @type Canvas */ - this.view = document.createElement( 'canvas' ); + this.view = view ? view : document.createElement( 'canvas' ); // hack to enable some hardware acceleration! //this.view.style["transform"] = "translatez(0)"; @@ -194,6 +199,18 @@ PIXI.CanvasRenderer.prototype.render = function(stage) this.context.clearRect(0, 0, this.width, this.height) this.renderDisplayObject(stage); + //as + + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } } /** diff --git a/docs/files/pixi_renderers_WebGLBatch.js.html b/docs/files/pixi_renderers_WebGLBatch.js.html index 6070a40..cc1e79c 100644 --- a/docs/files/pixi_renderers_WebGLBatch.js.html +++ b/docs/files/pixi_renderers_WebGLBatch.js.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • diff --git a/docs/files/pixi_renderers_WebGLRenderer.js.html b/docs/files/pixi_renderers_WebGLRenderer.js.html index 3504fd3..a08b217 100644 --- a/docs/files/pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/pixi_renderers_WebGLRenderer.js.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • @@ -129,13 +133,14 @@ PIXI._defaultFrame = new PIXI.Rectangle(0,0,1,1); * @default 0 * @param height {Number} the height of the canvas view * @default 0 + * @param view {Canvas} the canvas to use as a view, optional */ -PIXI.WebGLRenderer = function(width, height) +PIXI.WebGLRenderer = function(width, height, view) { this.width = width ? width : 800; this.height = height ? height : 600; - this.view = document.createElement( 'canvas' ); + this.view = view ? view : document.createElement( 'canvas' ); this.view.width = this.width; this.view.height = this.height; this.view.background = "#FF0000"; @@ -284,7 +289,7 @@ PIXI.WebGLRenderer.prototype.render = function(stage) for (var i=0; i < stage.__childrenRemoved.length; i++) { this.removeDisplayObject(stage.__childrenRemoved[i]); - // stage.__childrenRemoved[i].cacheVisible = false; + // stage.__childrenRemoved[i].cacheVisible = false; } /* // no add all new sprites @@ -334,6 +339,17 @@ PIXI.WebGLRenderer.prototype.render = function(stage) } } + // interaction + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } } /** diff --git a/docs/files/pixi_renderers_WebGLShaders.js.html b/docs/files/pixi_renderers_WebGLShaders.js.html index 5ab65ec..b15b93f 100644 --- a/docs/files/pixi_renderers_WebGLShaders.js.html +++ b/docs/files/pixi_renderers_WebGLShaders.js.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • diff --git a/docs/files/pixi_textures_BaseTexture.js.html b/docs/files/pixi_textures_BaseTexture.js.html index a1d5004..438dc2f 100644 --- a/docs/files/pixi_textures_BaseTexture.js.html +++ b/docs/files/pixi_textures_BaseTexture.js.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • diff --git a/docs/files/pixi_textures_Texture.js.html b/docs/files/pixi_textures_Texture.js.html index 1b17ae6..d7a1af4 100644 --- a/docs/files/pixi_textures_Texture.js.html +++ b/docs/files/pixi_textures_Texture.js.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • @@ -299,10 +303,13 @@ PIXI.Texture.addTextureToCache = function(texture, id) * Remove a texture from the textureCache. * @method removeTextureFromCache * @param id {String} the id of the texture to be removed + * @return {Texture} the texture that was removed */ PIXI.Texture.removeTextureFromCache = function(id) { - PIXI.TextureCache[id] = texture; + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; } diff --git a/docs/files/pixi_utils_Detector.js.html b/docs/files/pixi_utils_Detector.js.html index d3f3a54..de02aa1 100644 --- a/docs/files/pixi_utils_Detector.js.html +++ b/docs/files/pixi_utils_Detector.js.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • @@ -125,8 +129,9 @@ * @static * @param width {Number} the width of the renderers view * @param height {Number} the height of the renderers view + * @param view {Canvas} the canvas to use as a view, optional */ -PIXI.autoDetectRenderer = function(width, height) +PIXI.autoDetectRenderer = function(width, height, view) { if(!width)width = 800; if(!height)height = 600; @@ -137,10 +142,10 @@ PIXI.autoDetectRenderer = function(width, height) //console.log(webgl); if( webgl ) { - return new PIXI.WebGLRenderer(width, height) + return new PIXI.WebGLRenderer(width, height, view) } - return new PIXI.CanvasRenderer(width, height); + return new PIXI.CanvasRenderer(width, height, view); } diff --git a/docs/files/pixi_utils_EventTarget.js.html b/docs/files/pixi_utils_EventTarget.js.html index 3585a93..a01653e 100644 --- a/docs/files/pixi_utils_EventTarget.js.html +++ b/docs/files/pixi_utils_EventTarget.js.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • diff --git a/docs/files/pixi_utils_Utils.js.html b/docs/files/pixi_utils_Utils.js.html index 394866f..9c4f13d 100644 --- a/docs/files/pixi_utils_Utils.js.html +++ b/docs/files/pixi_utils_Utils.js.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • diff --git a/docs/index.html b/docs/index.html index e2ac3f0..71787a2 100644 --- a/docs/index.html +++ b/docs/index.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • diff --git a/docs/logo_small.png b/docs/logo_small.png deleted file mode 100644 index f7c1f4f5c48e2625420dacc933867449e778bcf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14027 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 diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index 3bdd35a..1f0caeb 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -15,11 +15,11 @@
    -

    +

    - API Docs for: 0.9 + API Docs for: 1.0
    @@ -51,6 +51,10 @@
  • DisplayObjectContainer
  • +
  • InteractionData
  • + +
  • InteractionManager
  • +
  • MovieClip
  • Point
  • @@ -170,6 +174,18 @@ +
  • + + InteractionData + +
  • + +
  • + + InteractionManager + +
  • +
  • MovieClip diff --git a/examples/example 6 - Interactivity/button.png b/examples/example 6 - Interactivity/button.png new file mode 100644 index 0000000000000000000000000000000000000000..b0cd012f5afc4b5769aa176dd1df584529444bdb GIT binary patch literal 42648 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

    (9dp~-+uUXde_wp>Ai2> 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 literal 0 HcmV?d00001 diff --git a/examples/example 6 - Interactivity/button_test_BG.jpg b/examples/example 6 - Interactivity/button_test_BG.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0449cbbce0d7ed618dee828be0141ca4b4d80f83 GIT binary patch literal 31875 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 BmEZsX literal 0 HcmV?d00001 diff --git a/examples/example 6 - Interactivity/index.html b/examples/example 6 - Interactivity/index.html new file mode 100644 index 0000000..f5a0053 --- /dev/null +++ b/examples/example 6 - Interactivity/index.html @@ -0,0 +1,175 @@ + + + + pixi.js example 6 Interactivity + + + + + + + + + + + diff --git a/examples/example 6 - Interactivity/pixi.js b/examples/example 6 - Interactivity/pixi.js new file mode 100644 index 0000000..e4c61db --- /dev/null +++ b/examples/example 6 - Interactivity/pixi.js @@ -0,0 +1,128 @@ +var PIXI=PIXI||{};PIXI.Point=function(a,c){this.x=a?a:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(a,c,f,d){this.x=a?a:0;this.y=c?c:0;this.width=f?f:0;this.height=d?d:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){window.setTimeout(a,1E3/60)}}();function HEXtoRGB(a){return[(a>>16&255)/255,(a>>8&255)/255,(a&255)/255]} +"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var a=Array.prototype.slice;return function(c){function f(){var h=g.concat(a.call(arguments));d.apply(this instanceof f?this:c,h)}var d=this,g=a.call(arguments,1);if("function"!=typeof d)throw new TypeError;f.prototype=function j(a){a&&(j.prototype=a);if(!(this instanceof j))return new j}(d.prototype);return f}}()); +var AjaxRequest=function(){var a=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var e=g[0];return e*(1.5-0.5*b*e*e)}}else d.invsqrt=function(b){return 1/Math.sqrt(b)}; +var j=null;f();var k={create:function(b){var e=new j(3);b?(e[0]=b[0],e[1]=b[1],e[2]=b[2]):e[0]=e[1]=e[2]=0;return e},createFrom:function(b,e,a){var c=new j(3);c[0]=b;c[1]=e;c[2]=a;return c},set:function(b,e){e[0]=b[0];e[1]=b[1];e[2]=b[2];return e},equal:function(b,e){return b===e||1E-6>Math.abs(b[0]-e[0])&&1E-6>Math.abs(b[1]-e[1])&&1E-6>Math.abs(b[2]-e[2])},add:function(b,e,a){if(!a||b===a)return b[0]+=e[0],b[1]+=e[1],b[2]+=e[2],b;a[0]=b[0]+e[0];a[1]=b[1]+e[1];a[2]=b[2]+e[2];return a},subtract:function(b, +e,a){if(!a||b===a)return b[0]-=e[0],b[1]-=e[1],b[2]-=e[2],b;a[0]=b[0]-e[0];a[1]=b[1]-e[1];a[2]=b[2]-e[2];return a},multiply:function(b,e,a){if(!a||b===a)return b[0]*=e[0],b[1]*=e[1],b[2]*=e[2],b;a[0]=b[0]*e[0];a[1]=b[1]*e[1];a[2]=b[2]*e[2];return a},negate:function(b,e){e||(e=b);e[0]=-b[0];e[1]=-b[1];e[2]=-b[2];return e},scale:function(b,e,a){if(!a||b===a)return b[0]*=e,b[1]*=e,b[2]*=e,b;a[0]=b[0]*e;a[1]=b[1]*e;a[2]=b[2]*e;return a},normalize:function(b,e){e||(e=b);var a=b[0],c=b[1],p=b[2],d=Math.sqrt(a* +a+c*c+p*p);if(!d)return e[0]=0,e[1]=0,e[2]=0,e;if(1===d)return e[0]=a,e[1]=c,e[2]=p,e;d=1/d;e[0]=a*d;e[1]=c*d;e[2]=p*d;return e},cross:function(b,e,a){a||(a=b);var c=b[0],p=b[1];b=b[2];var d=e[0],f=e[1];e=e[2];a[0]=p*e-b*f;a[1]=b*d-c*e;a[2]=c*f-p*d;return a},length:function(b){var e=b[0],a=b[1];b=b[2];return Math.sqrt(e*e+a*a+b*b)},squaredLength:function(b){var e=b[0],a=b[1];b=b[2];return e*e+a*a+b*b},dot:function(b,e){return b[0]*e[0]+b[1]*e[1]+b[2]*e[2]},direction:function(b,e,a){a||(a=b);var c= +b[0]-e[0],p=b[1]-e[1];b=b[2]-e[2];e=Math.sqrt(c*c+p*p+b*b);if(!e)return a[0]=0,a[1]=0,a[2]=0,a;e=1/e;a[0]=c*e;a[1]=p*e;a[2]=b*e;return a},lerp:function(b,e,a,c){c||(c=b);c[0]=b[0]+a*(e[0]-b[0]);c[1]=b[1]+a*(e[1]-b[1]);c[2]=b[2]+a*(e[2]-b[2]);return c},dist:function(b,e){var a=e[0]-b[0],c=e[1]-b[1],p=e[2]-b[2];return Math.sqrt(a*a+c*c+p*p)}},r=null,n=new j(4);k.unproject=function(b,e,a,c,p){p||(p=b);r||(r=s.create());var d=r;n[0]=2*(b[0]-c[0])/c[2]-1;n[1]=2*(b[1]-c[1])/c[3]-1;n[2]=2*b[2]-1;n[3]=1; +s.multiply(a,e,d);if(!s.inverse(d))return null;s.multiplyVec4(d,n);if(0===n[3])return null;p[0]=n[0]/n[3];p[1]=n[1]/n[3];p[2]=n[2]/n[3];return p};var y=k.createFrom(1,0,0),C=k.createFrom(0,1,0),m=k.createFrom(0,0,1),u=k.create();k.rotationTo=function(b,e,a){a||(a=l.create());var c=k.dot(b,e);if(1<=c)l.set(E,a);else if(-0.999999>c)k.cross(y,b,u),1E-6>k.length(u)&&k.cross(C,b,u),1E-6>k.length(u)&&k.cross(m,b,u),k.normalize(u),l.fromAngleAxis(Math.PI,u,a);else{var c=Math.sqrt(2*(1+c)),p=1/c;k.cross(b, +e,u);a[0]=u[0]*p;a[1]=u[1]*p;a[2]=u[2]*p;a[3]=0.5*c;l.normalize(a)}1a[3]&&(a[3]=-1);return a};k.str=function(b){return"["+b[0]+", "+b[1]+", "+b[2]+"]"};var x={create:function(b){var e=new j(9);b?(e[0]=b[0],e[1]=b[1],e[2]=b[2],e[3]=b[3],e[4]=b[4],e[5]=b[5],e[6]=b[6],e[7]=b[7],e[8]=b[8]):e[0]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=0;return e},createFrom:function(b,e,a,c,p,d,f,g,G){var v=new j(9);v[0]=b;v[1]=e;v[2]=a;v[3]=c;v[4]=p;v[5]=d;v[6]=f;v[7]=g;v[8]=G;return v},determinant:function(b){var e= +b[3],a=b[4],c=b[5],p=b[6],d=b[7],f=b[8];return b[0]*(f*a-c*d)+b[1]*(-f*e+c*p)+b[2]*(d*e-a*p)},inverse:function(b,e){var a=b[0],c=b[1],p=b[2],d=b[3],f=b[4],g=b[5],G=b[6],v=b[7],h=b[8],j=h*f-g*v,k=-h*d+g*G,l=v*d-f*G,q=a*j+c*k+p*l;if(!q)return null;q=1/q;e||(e=x.create());e[0]=j*q;e[1]=(-h*c+p*v)*q;e[2]=(g*c-p*f)*q;e[3]=k*q;e[4]=(h*a-p*G)*q;e[5]=(-g*a+p*d)*q;e[6]=l*q;e[7]=(-v*a+c*G)*q;e[8]=(f*a-c*d)*q;return e},multiply:function(b,e,a){a||(a=b);var c=b[0],p=b[1],d=b[2],f=b[3],g=b[4],G=b[5],v=b[6],h= +b[7];b=b[8];var j=e[0],k=e[1],l=e[2],q=e[3],m=e[4],t=e[5],n=e[6],w=e[7];e=e[8];a[0]=j*c+k*f+l*v;a[1]=j*p+k*g+l*h;a[2]=j*d+k*G+l*b;a[3]=q*c+m*f+t*v;a[4]=q*p+m*g+t*h;a[5]=q*d+m*G+t*b;a[6]=n*c+w*f+e*v;a[7]=n*p+w*g+e*h;a[8]=n*d+w*G+e*b;return a},multiplyVec2:function(b,e,a){a||(a=e);var c=e[0];e=e[1];a[0]=c*b[0]+e*b[3]+b[6];a[1]=c*b[1]+e*b[4]+b[7];return a},multiplyVec3:function(b,e,a){a||(a=e);var c=e[0],p=e[1];e=e[2];a[0]=c*b[0]+p*b[3]+e*b[6];a[1]=c*b[1]+p*b[4]+e*b[7];a[2]=c*b[2]+p*b[5]+e*b[8];return a}, +set:function(b,e){e[0]=b[0];e[1]=b[1];e[2]=b[2];e[3]=b[3];e[4]=b[4];e[5]=b[5];e[6]=b[6];e[7]=b[7];e[8]=b[8];return e},equal:function(b,e){return b===e||1E-6>Math.abs(b[0]-e[0])&&1E-6>Math.abs(b[1]-e[1])&&1E-6>Math.abs(b[2]-e[2])&&1E-6>Math.abs(b[3]-e[3])&&1E-6>Math.abs(b[4]-e[4])&&1E-6>Math.abs(b[5]-e[5])&&1E-6>Math.abs(b[6]-e[6])&&1E-6>Math.abs(b[7]-e[7])&&1E-6>Math.abs(b[8]-e[8])},identity:function(b){b||(b=x.create());b[0]=1;b[1]=0;b[2]=0;b[3]=0;b[4]=1;b[5]=0;b[6]=0;b[7]=0;b[8]=1;return b},transpose:function(b, +e){if(!e||b===e){var a=b[1],c=b[2],p=b[5];b[1]=b[3];b[2]=b[6];b[3]=a;b[5]=b[7];b[6]=c;b[7]=p;return b}e[0]=b[0];e[1]=b[3];e[2]=b[6];e[3]=b[1];e[4]=b[4];e[5]=b[7];e[6]=b[2];e[7]=b[5];e[8]=b[8];return e},toMat4:function(b,e){e||(e=s.create());e[15]=1;e[14]=0;e[13]=0;e[12]=0;e[11]=0;e[10]=b[8];e[9]=b[7];e[8]=b[6];e[7]=0;e[6]=b[5];e[5]=b[4];e[4]=b[3];e[3]=0;e[2]=b[2];e[1]=b[1];e[0]=b[0];return e},str:function(b){return"["+b[0]+", "+b[1]+", "+b[2]+", "+b[3]+", "+b[4]+", "+b[5]+", "+b[6]+", "+b[7]+", "+ +b[8]+"]"}},s={create:function(b){var e=new j(16);b&&(e[0]=b[0],e[1]=b[1],e[2]=b[2],e[3]=b[3],e[4]=b[4],e[5]=b[5],e[6]=b[6],e[7]=b[7],e[8]=b[8],e[9]=b[9],e[10]=b[10],e[11]=b[11],e[12]=b[12],e[13]=b[13],e[14]=b[14],e[15]=b[15]);return e},createFrom:function(b,e,a,c,p,d,f,g,h,v,N,I,k,l,q,m){var t=new j(16);t[0]=b;t[1]=e;t[2]=a;t[3]=c;t[4]=p;t[5]=d;t[6]=f;t[7]=g;t[8]=h;t[9]=v;t[10]=N;t[11]=I;t[12]=k;t[13]=l;t[14]=q;t[15]=m;return t},set:function(b,e){e[0]=b[0];e[1]=b[1];e[2]=b[2];e[3]=b[3];e[4]=b[4]; +e[5]=b[5];e[6]=b[6];e[7]=b[7];e[8]=b[8];e[9]=b[9];e[10]=b[10];e[11]=b[11];e[12]=b[12];e[13]=b[13];e[14]=b[14];e[15]=b[15];return e},equal:function(b,e){return b===e||1E-6>Math.abs(b[0]-e[0])&&1E-6>Math.abs(b[1]-e[1])&&1E-6>Math.abs(b[2]-e[2])&&1E-6>Math.abs(b[3]-e[3])&&1E-6>Math.abs(b[4]-e[4])&&1E-6>Math.abs(b[5]-e[5])&&1E-6>Math.abs(b[6]-e[6])&&1E-6>Math.abs(b[7]-e[7])&&1E-6>Math.abs(b[8]-e[8])&&1E-6>Math.abs(b[9]-e[9])&&1E-6>Math.abs(b[10]-e[10])&&1E-6>Math.abs(b[11]-e[11])&&1E-6>Math.abs(b[12]- +e[12])&&1E-6>Math.abs(b[13]-e[13])&&1E-6>Math.abs(b[14]-e[14])&&1E-6>Math.abs(b[15]-e[15])},identity:function(b){b||(b=s.create());b[0]=1;b[1]=0;b[2]=0;b[3]=0;b[4]=0;b[5]=1;b[6]=0;b[7]=0;b[8]=0;b[9]=0;b[10]=1;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return b},transpose:function(b,e){if(!e||b===e){var a=b[1],c=b[2],p=b[3],d=b[6],f=b[7],g=b[11];b[1]=b[4];b[2]=b[8];b[3]=b[12];b[4]=a;b[6]=b[9];b[7]=b[13];b[8]=c;b[9]=d;b[11]=b[14];b[12]=p;b[13]=f;b[14]=g;return b}e[0]=b[0];e[1]=b[4];e[2]=b[8];e[3]=b[12]; +e[4]=b[1];e[5]=b[5];e[6]=b[9];e[7]=b[13];e[8]=b[2];e[9]=b[6];e[10]=b[10];e[11]=b[14];e[12]=b[3];e[13]=b[7];e[14]=b[11];e[15]=b[15];return e},determinant:function(b){var e=b[0],a=b[1],c=b[2],p=b[3],d=b[4],f=b[5],g=b[6],h=b[7],v=b[8],j=b[9],I=b[10],k=b[11],l=b[12],q=b[13],m=b[14];b=b[15];return l*j*g*p-v*q*g*p-l*f*I*p+d*q*I*p+v*f*m*p-d*j*m*p-l*j*c*h+v*q*c*h+l*a*I*h-e*q*I*h-v*a*m*h+e*j*m*h+l*f*c*k-d*q*c*k-l*a*g*k+e*q*g*k+d*a*m*k-e*f*m*k-v*f*c*b+d*j*c*b+v*a*g*b-e*j*g*b-d*a*I*b+e*f*I*b},inverse:function(b, +e){e||(e=b);var a=b[0],c=b[1],p=b[2],d=b[3],f=b[4],g=b[5],h=b[6],v=b[7],j=b[8],k=b[9],l=b[10],m=b[11],q=b[12],n=b[13],t=b[14],r=b[15],w=a*g-c*f,B=a*h-p*f,z=a*v-d*f,A=c*h-p*g,s=c*v-d*g,u=p*v-d*h,x=j*n-k*q,y=j*t-l*q,C=j*r-m*q,D=k*t-l*n,E=k*r-m*n,J=l*r-m*t,F=w*J-B*E+z*D+A*C-s*y+u*x;if(!F)return null;F=1/F;e[0]=(g*J-h*E+v*D)*F;e[1]=(-c*J+p*E-d*D)*F;e[2]=(n*u-t*s+r*A)*F;e[3]=(-k*u+l*s-m*A)*F;e[4]=(-f*J+h*C-v*y)*F;e[5]=(a*J-p*C+d*y)*F;e[6]=(-q*u+t*z-r*B)*F;e[7]=(j*u-l*z+m*B)*F;e[8]=(f*E-g*C+v*x)*F;e[9]= +(-a*E+c*C-d*x)*F;e[10]=(q*s-n*z+r*w)*F;e[11]=(-j*s+k*z-m*w)*F;e[12]=(-f*D+g*y-h*x)*F;e[13]=(a*D-c*y+p*x)*F;e[14]=(-q*A+n*B-t*w)*F;e[15]=(j*A-k*B+l*w)*F;return e},toRotationMat:function(b,e){e||(e=s.create());e[0]=b[0];e[1]=b[1];e[2]=b[2];e[3]=b[3];e[4]=b[4];e[5]=b[5];e[6]=b[6];e[7]=b[7];e[8]=b[8];e[9]=b[9];e[10]=b[10];e[11]=b[11];e[12]=0;e[13]=0;e[14]=0;e[15]=1;return e},toMat3:function(b,e){e||(e=x.create());e[0]=b[0];e[1]=b[1];e[2]=b[2];e[3]=b[4];e[4]=b[5];e[5]=b[6];e[6]=b[8];e[7]=b[9];e[8]=b[10]; +return e},toInverseMat3:function(b,e){var a=b[0],c=b[1],d=b[2],f=b[4],H=b[5],g=b[6],h=b[8],j=b[9],k=b[10],l=k*H-g*j,m=-k*f+g*h,n=j*f-H*h,q=a*l+c*m+d*n;if(!q)return null;q=1/q;e||(e=x.create());e[0]=l*q;e[1]=(-k*c+d*j)*q;e[2]=(g*c-d*H)*q;e[3]=m*q;e[4]=(k*a-d*h)*q;e[5]=(-g*a+d*f)*q;e[6]=n*q;e[7]=(-j*a+c*h)*q;e[8]=(H*a-c*f)*q;return e},multiply:function(b,e,a){a||(a=b);var c=b[0],d=b[1],f=b[2],H=b[3],g=b[4],h=b[5],j=b[6],k=b[7],l=b[8],m=b[9],n=b[10],q=b[11],r=b[12],t=b[13],s=b[14];b=b[15];var w=e[0], +B=e[1],z=e[2],A=e[3];a[0]=w*c+B*g+z*l+A*r;a[1]=w*d+B*h+z*m+A*t;a[2]=w*f+B*j+z*n+A*s;a[3]=w*H+B*k+z*q+A*b;w=e[4];B=e[5];z=e[6];A=e[7];a[4]=w*c+B*g+z*l+A*r;a[5]=w*d+B*h+z*m+A*t;a[6]=w*f+B*j+z*n+A*s;a[7]=w*H+B*k+z*q+A*b;w=e[8];B=e[9];z=e[10];A=e[11];a[8]=w*c+B*g+z*l+A*r;a[9]=w*d+B*h+z*m+A*t;a[10]=w*f+B*j+z*n+A*s;a[11]=w*H+B*k+z*q+A*b;w=e[12];B=e[13];z=e[14];A=e[15];a[12]=w*c+B*g+z*l+A*r;a[13]=w*d+B*h+z*m+A*t;a[14]=w*f+B*j+z*n+A*s;a[15]=w*H+B*k+z*q+A*b;return a},multiplyVec3:function(b,e,a){a||(a=e); +var c=e[0],d=e[1];e=e[2];a[0]=b[0]*c+b[4]*d+b[8]*e+b[12];a[1]=b[1]*c+b[5]*d+b[9]*e+b[13];a[2]=b[2]*c+b[6]*d+b[10]*e+b[14];return a},multiplyVec4:function(b,e,a){a||(a=e);var c=e[0],d=e[1],f=e[2];e=e[3];a[0]=b[0]*c+b[4]*d+b[8]*f+b[12]*e;a[1]=b[1]*c+b[5]*d+b[9]*f+b[13]*e;a[2]=b[2]*c+b[6]*d+b[10]*f+b[14]*e;a[3]=b[3]*c+b[7]*d+b[11]*f+b[15]*e;return a},translate:function(b,e,a){var c=e[0],d=e[1];e=e[2];var f,g,h,j,v,k,l,m,n,q,r,t;if(!a||b===a)return b[12]=b[0]*c+b[4]*d+b[8]*e+b[12],b[13]=b[1]*c+b[5]*d+ +b[9]*e+b[13],b[14]=b[2]*c+b[6]*d+b[10]*e+b[14],b[15]=b[3]*c+b[7]*d+b[11]*e+b[15],b;f=b[0];g=b[1];h=b[2];j=b[3];v=b[4];k=b[5];l=b[6];m=b[7];n=b[8];q=b[9];r=b[10];t=b[11];a[0]=f;a[1]=g;a[2]=h;a[3]=j;a[4]=v;a[5]=k;a[6]=l;a[7]=m;a[8]=n;a[9]=q;a[10]=r;a[11]=t;a[12]=f*c+v*d+n*e+b[12];a[13]=g*c+k*d+q*e+b[13];a[14]=h*c+l*d+r*e+b[14];a[15]=j*c+m*d+t*e+b[15];return a},scale:function(b,e,a){var c=e[0],d=e[1];e=e[2];if(!a||b===a)return b[0]*=c,b[1]*=c,b[2]*=c,b[3]*=c,b[4]*=d,b[5]*=d,b[6]*=d,b[7]*=d,b[8]*=e,b[9]*= +e,b[10]*=e,b[11]*=e,b;a[0]=b[0]*c;a[1]=b[1]*c;a[2]=b[2]*c;a[3]=b[3]*c;a[4]=b[4]*d;a[5]=b[5]*d;a[6]=b[6]*d;a[7]=b[7]*d;a[8]=b[8]*e;a[9]=b[9]*e;a[10]=b[10]*e;a[11]=b[11]*e;a[12]=b[12];a[13]=b[13];a[14]=b[14];a[15]=b[15];return a},rotate:function(b,e,a,c){var d=a[0],f=a[1];a=a[2];var g=Math.sqrt(d*d+f*f+a*a),h,j,k,l,m,n,r,q,s,t,u,w,B,z,A,x,y,C,D,E;if(!g)return null;1!==g&&(g=1/g,d*=g,f*=g,a*=g);h=Math.sin(e);j=Math.cos(e);k=1-j;e=b[0];g=b[1];l=b[2];m=b[3];n=b[4];r=b[5];q=b[6];s=b[7];t=b[8];u=b[9];w= +b[10];B=b[11];z=d*d*k+j;A=f*d*k+a*h;x=a*d*k-f*h;y=d*f*k-a*h;C=f*f*k+j;D=a*f*k+d*h;E=d*a*k+f*h;d=f*a*k-d*h;f=a*a*k+j;c?b!==c&&(c[12]=b[12],c[13]=b[13],c[14]=b[14],c[15]=b[15]):c=b;c[0]=e*z+n*A+t*x;c[1]=g*z+r*A+u*x;c[2]=l*z+q*A+w*x;c[3]=m*z+s*A+B*x;c[4]=e*y+n*C+t*D;c[5]=g*y+r*C+u*D;c[6]=l*y+q*C+w*D;c[7]=m*y+s*C+B*D;c[8]=e*E+n*d+t*f;c[9]=g*E+r*d+u*f;c[10]=l*E+q*d+w*f;c[11]=m*E+s*d+B*f;return c},rotateX:function(b,e,a){var c=Math.sin(e);e=Math.cos(e);var d=b[4],f=b[5],g=b[6],h=b[7],j=b[8],k=b[9],l=b[10], +m=b[11];a?b!==a&&(a[0]=b[0],a[1]=b[1],a[2]=b[2],a[3]=b[3],a[12]=b[12],a[13]=b[13],a[14]=b[14],a[15]=b[15]):a=b;a[4]=d*e+j*c;a[5]=f*e+k*c;a[6]=g*e+l*c;a[7]=h*e+m*c;a[8]=d*-c+j*e;a[9]=f*-c+k*e;a[10]=g*-c+l*e;a[11]=h*-c+m*e;return a},rotateY:function(b,e,a){var c=Math.sin(e);e=Math.cos(e);var d=b[0],f=b[1],g=b[2],h=b[3],j=b[8],k=b[9],l=b[10],m=b[11];a?b!==a&&(a[4]=b[4],a[5]=b[5],a[6]=b[6],a[7]=b[7],a[12]=b[12],a[13]=b[13],a[14]=b[14],a[15]=b[15]):a=b;a[0]=d*e+j*-c;a[1]=f*e+k*-c;a[2]=g*e+l*-c;a[3]=h* +e+m*-c;a[8]=d*c+j*e;a[9]=f*c+k*e;a[10]=g*c+l*e;a[11]=h*c+m*e;return a},rotateZ:function(b,e,a){var c=Math.sin(e);e=Math.cos(e);var d=b[0],f=b[1],g=b[2],h=b[3],j=b[4],k=b[5],l=b[6],m=b[7];a?b!==a&&(a[8]=b[8],a[9]=b[9],a[10]=b[10],a[11]=b[11],a[12]=b[12],a[13]=b[13],a[14]=b[14],a[15]=b[15]):a=b;a[0]=d*e+j*c;a[1]=f*e+k*c;a[2]=g*e+l*c;a[3]=h*e+m*c;a[4]=d*-c+j*e;a[5]=f*-c+k*e;a[6]=g*-c+l*e;a[7]=h*-c+m*e;return a},frustum:function(b,e,a,c,d,f,g){g||(g=s.create());var h=e-b,j=c-a,k=f-d;g[0]=2*d/h;g[1]=0; +g[2]=0;g[3]=0;g[4]=0;g[5]=2*d/j;g[6]=0;g[7]=0;g[8]=(e+b)/h;g[9]=(c+a)/j;g[10]=-(f+d)/k;g[11]=-1;g[12]=0;g[13]=0;g[14]=-(2*f*d)/k;g[15]=0;return g},perspective:function(b,e,a,c,d){b=a*Math.tan(b*Math.PI/360);e*=b;return s.frustum(-e,e,-b,b,a,c,d)},ortho:function(b,a,c,d,f,g,h){h||(h=s.create());var j=a-b,k=d-c,l=g-f;h[0]=2/j;h[1]=0;h[2]=0;h[3]=0;h[4]=0;h[5]=2/k;h[6]=0;h[7]=0;h[8]=0;h[9]=0;h[10]=-2/l;h[11]=0;h[12]=-(b+a)/j;h[13]=-(d+c)/k;h[14]=-(g+f)/l;h[15]=1;return h},lookAt:function(b,a,c,d){d|| +(d=s.create());var f,g,h,j,k,l,m,n,r=b[0],u=b[1];b=b[2];h=c[0];j=c[1];g=c[2];m=a[0];c=a[1];f=a[2];if(r===m&&u===c&&b===f)return s.identity(d);a=r-m;c=u-c;m=b-f;n=1/Math.sqrt(a*a+c*c+m*m);a*=n;c*=n;m*=n;f=j*m-g*c;g=g*a-h*m;h=h*c-j*a;(n=Math.sqrt(f*f+g*g+h*h))?(n=1/n,f*=n,g*=n,h*=n):h=g=f=0;j=c*h-m*g;k=m*f-a*h;l=a*g-c*f;(n=Math.sqrt(j*j+k*k+l*l))?(n=1/n,j*=n,k*=n,l*=n):l=k=j=0;d[0]=f;d[1]=j;d[2]=a;d[3]=0;d[4]=g;d[5]=k;d[6]=c;d[7]=0;d[8]=h;d[9]=l;d[10]=m;d[11]=0;d[12]=-(f*r+g*u+h*b);d[13]=-(j*r+k*u+ +l*b);d[14]=-(a*r+c*u+m*b);d[15]=1;return d},fromRotationTranslation:function(b,a,c){c||(c=s.create());var d=b[0],f=b[1],g=b[2],h=b[3],j=d+d,k=f+f,l=g+g;b=d*j;var m=d*k,d=d*l,n=f*k,f=f*l,g=g*l,j=h*j,k=h*k,h=h*l;c[0]=1-(n+g);c[1]=m+h;c[2]=d-k;c[3]=0;c[4]=m-h;c[5]=1-(b+g);c[6]=f+j;c[7]=0;c[8]=d+k;c[9]=f-j;c[10]=1-(b+n);c[11]=0;c[12]=a[0];c[13]=a[1];c[14]=a[2];c[15]=1;return c},str:function(b){return"["+b[0]+", "+b[1]+", "+b[2]+", "+b[3]+", "+b[4]+", "+b[5]+", "+b[6]+", "+b[7]+", "+b[8]+", "+b[9]+", "+ +b[10]+", "+b[11]+", "+b[12]+", "+b[13]+", "+b[14]+", "+b[15]+"]"}},l={create:function(b){var a=new j(4);b?(a[0]=b[0],a[1]=b[1],a[2]=b[2],a[3]=b[3]):a[0]=a[1]=a[2]=a[3]=0;return a},createFrom:function(b,a,c,d){var f=new j(4);f[0]=b;f[1]=a;f[2]=c;f[3]=d;return f},set:function(b,a){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];return a},equal:function(b,a){return b===a||1E-6>Math.abs(b[0]-a[0])&&1E-6>Math.abs(b[1]-a[1])&&1E-6>Math.abs(b[2]-a[2])&&1E-6>Math.abs(b[3]-a[3])},identity:function(b){b||(b=l.create()); +b[0]=0;b[1]=0;b[2]=0;b[3]=1;return b}},E=l.identity();l.calculateW=function(b,a){var c=b[0],d=b[1],f=b[2];if(!a||b===a)return b[3]=-Math.sqrt(Math.abs(1-c*c-d*d-f*f)),b;a[0]=c;a[1]=d;a[2]=f;a[3]=-Math.sqrt(Math.abs(1-c*c-d*d-f*f));return a};l.dot=function(b,a){return b[0]*a[0]+b[1]*a[1]+b[2]*a[2]+b[3]*a[3]};l.inverse=function(b,a){var c=b[0],d=b[1],f=b[2],g=b[3],c=(c=c*c+d*d+f*f+g*g)?1/c:0;if(!a||b===a)return b[0]*=-c,b[1]*=-c,b[2]*=-c,b[3]*=c,b;a[0]=-b[0]*c;a[1]=-b[1]*c;a[2]=-b[2]*c;a[3]=b[3]*c; +return a};l.conjugate=function(b,a){if(!a||b===a)return b[0]*=-1,b[1]*=-1,b[2]*=-1,b;a[0]=-b[0];a[1]=-b[1];a[2]=-b[2];a[3]=b[3];return a};l.length=function(b){var a=b[0],c=b[1],d=b[2];b=b[3];return Math.sqrt(a*a+c*c+d*d+b*b)};l.normalize=function(b,a){a||(a=b);var c=b[0],d=b[1],f=b[2],g=b[3],h=Math.sqrt(c*c+d*d+f*f+g*g);if(0===h)return a[0]=0,a[1]=0,a[2]=0,a[3]=0,a;h=1/h;a[0]=c*h;a[1]=d*h;a[2]=f*h;a[3]=g*h;return a};l.add=function(b,a,c){if(!c||b===c)return b[0]+=a[0],b[1]+=a[1],b[2]+=a[2],b[3]+= +a[3],b;c[0]=b[0]+a[0];c[1]=b[1]+a[1];c[2]=b[2]+a[2];c[3]=b[3]+a[3];return c};l.multiply=function(b,a,c){c||(c=b);var d=b[0],f=b[1],g=b[2];b=b[3];var h=a[0],j=a[1],k=a[2];a=a[3];c[0]=d*a+b*h+f*k-g*j;c[1]=f*a+b*j+g*h-d*k;c[2]=g*a+b*k+d*j-f*h;c[3]=b*a-d*h-f*j-g*k;return c};l.multiplyVec3=function(b,a,c){c||(c=a);var d=a[0],f=a[1],g=a[2];a=b[0];var h=b[1],j=b[2];b=b[3];var k=b*d+h*g-j*f,l=b*f+j*d-a*g,m=b*g+a*f-h*d,d=-a*d-h*f-j*g;c[0]=k*b+d*-a+l*-j-m*-h;c[1]=l*b+d*-h+m*-a-k*-j;c[2]=m*b+d*-j+k*-h-l*-a; +return c};l.scale=function(b,a,c){if(!c||b===c)return b[0]*=a,b[1]*=a,b[2]*=a,b[3]*=a,b;c[0]=b[0]*a;c[1]=b[1]*a;c[2]=b[2]*a;c[3]=b[3]*a;return c};l.toMat3=function(b,a){a||(a=x.create());var c=b[0],d=b[1],f=b[2],g=b[3],h=c+c,j=d+d,k=f+f,l=c*h,m=c*j,c=c*k,n=d*j,d=d*k,f=f*k,h=g*h,j=g*j,g=g*k;a[0]=1-(n+f);a[1]=m+g;a[2]=c-j;a[3]=m-g;a[4]=1-(l+f);a[5]=d+h;a[6]=c+j;a[7]=d-h;a[8]=1-(l+n);return a};l.toMat4=function(b,a){a||(a=s.create());var c=b[0],d=b[1],f=b[2],g=b[3],h=c+c,j=d+d,k=f+f,l=c*h,m=c*j,c=c* +k,n=d*j,d=d*k,f=f*k,h=g*h,j=g*j,g=g*k;a[0]=1-(n+f);a[1]=m+g;a[2]=c-j;a[3]=0;a[4]=m-g;a[5]=1-(l+f);a[6]=d+h;a[7]=0;a[8]=c+j;a[9]=d-h;a[10]=1-(l+n);a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a};l.slerp=function(b,a,c,d){d||(d=b);var f=b[0]*a[0]+b[1]*a[1]+b[2]*a[2]+b[3]*a[3],g,h;if(1<=Math.abs(f))return d!==b&&(d[0]=b[0],d[1]=b[1],d[2]=b[2],d[3]=b[3]),d;g=Math.acos(f);h=Math.sqrt(1-f*f);if(0.0010>Math.abs(h))return d[0]=0.5*b[0]+0.5*a[0],d[1]=0.5*b[1]+0.5*a[1],d[2]=0.5*b[2]+0.5*a[2],d[3]=0.5*b[3]+ +0.5*a[3],d;f=Math.sin((1-c)*g)/h;c=Math.sin(c*g)/h;d[0]=b[0]*f+a[0]*c;d[1]=b[1]*f+a[1]*c;d[2]=b[2]*f+a[2]*c;d[3]=b[3]*f+a[3]*c;return d};l.fromRotationMatrix=function(b,a){a||(a=l.create());var c=b[0]+b[4]+b[8],d;if(0b[0]&&(c=1);b[8]>b[3*c+c]&&(c=2);var f=d[c],g=d[f];d=Math.sqrt(b[3*c+c]-b[3*f+f]-b[3*g+g]+1);a[c]=0.5*d;d= +0.5/d;a[3]=(b[3*g+f]-b[3*f+g])*d;a[f]=(b[3*f+c]+b[3*c+f])*d;a[g]=(b[3*g+c]+b[3*c+g])*d}return a};x.toQuat4=l.fromRotationMatrix;var D=x.create();l.fromAxes=function(b,a,c,d){D[0]=a[0];D[3]=a[1];D[6]=a[2];D[1]=c[0];D[4]=c[1];D[7]=c[2];D[2]=b[0];D[5]=b[1];D[8]=b[2];return l.fromRotationMatrix(D,d)};l.identity=function(b){b||(b=l.create());b[0]=0;b[1]=0;b[2]=0;b[3]=1;return b};l.fromAngleAxis=function(b,a,c){c||(c=l.create());b*=0.5;var d=Math.sin(b);c[3]=Math.cos(b);c[0]=d*a[0];c[1]=d*a[1];c[2]=d*a[2]; +return c};l.toAngleAxis=function(b,a){a||(a=b);var c=b[0]*b[0]+b[1]*b[1]+b[2]*b[2];0Math.abs(b[0]-a[0])&&1E-6>Math.abs(b[1]-a[1])},negate:function(b,a){a||(a=b); +a[0]=-b[0];a[1]=-b[1];return a},normalize:function(b,a){a||(a=b);var c=b[0]*b[0]+b[1]*b[1];0 +Math.abs(a[0]-c[0])&&1E-6>Math.abs(a[1]-c[1])&&1E-6>Math.abs(a[2]-c[2])&&1E-6>Math.abs(a[3]-c[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,c){if(!c||a===c){var d=a[1];a[1]=a[2];a[2]=d;return a}c[0]=a[0];c[1]=a[2];c[2]=a[1];c[3]=a[3];return c},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,c){c||(c=a);var d=a[0],f=a[1],g=a[2],h=a[3],j=d*h-g*f;if(!j)return null;j=1/j;c[0]=h*j;c[1]=-f*j;c[2]=-g*j;c[3]=d*j;return c},multiply:function(a, +c,d){d||(d=a);var f=a[0],g=a[1],h=a[2];a=a[3];d[0]=f*c[0]+g*c[2];d[1]=f*c[1]+g*c[3];d[2]=h*c[0]+a*c[2];d[3]=h*c[1]+a*c[3];return d},rotate:function(a,c,d){d||(d=a);var f=a[0],g=a[1],h=a[2];a=a[3];var j=Math.sin(c);c=Math.cos(c);d[0]=f*c+g*j;d[1]=f*-j+g*c;d[2]=h*c+a*j;d[3]=h*-j+a*c;return d},multiplyVec2:function(a,c,d){d||(d=c);var f=c[0];c=c[1];d[0]=f*a[0]+c*a[1];d[1]=f*a[2]+c*a[3];return d},scale:function(a,c,d){d||(d=a);var f=a[1],g=a[2],h=a[3],j=c[0];c=c[1];d[0]=a[0]*j;d[1]=f*c;d[2]=g*j;d[3]= +h*c;return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var c=new j(4);a?(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]):(c[0]=0,c[1]=0,c[2]=0,c[3]=0);return c},createFrom:function(a,c,d,f){var g=new j(4);g[0]=a;g[1]=c;g[2]=d;g[3]=f;return g},add:function(a,c,d){d||(d=c);d[0]=a[0]+c[0];d[1]=a[1]+c[1];d[2]=a[2]+c[2];d[3]=a[3]+c[3];return d},subtract:function(a,c,d){d||(d=c);d[0]=a[0]-c[0];d[1]=a[1]-c[1];d[2]=a[2]-c[2];d[3]=a[3]-c[3];return d},multiply:function(a, +c,d){d||(d=c);d[0]=a[0]*c[0];d[1]=a[1]*c[1];d[2]=a[2]*c[2];d[3]=a[3]*c[3];return d},divide:function(a,c,d){d||(d=c);d[0]=a[0]/c[0];d[1]=a[1]/c[1];d[2]=a[2]/c[2];d[3]=a[3]/c[3];return d},scale:function(a,c,d){d||(d=a);d[0]=a[0]*c;d[1]=a[1]*c;d[2]=a[2]*c;d[3]=a[3]*c;return d},set:function(a,c){c[0]=a[0];c[1]=a[1];c[2]=a[2];c[3]=a[3];return c},equal:function(a,c){return a===c||1E-6>Math.abs(a[0]-c[0])&&1E-6>Math.abs(a[1]-c[1])&&1E-6>Math.abs(a[2]-c[2])&&1E-6>Math.abs(a[3]-c[3])},negate:function(a,c){c|| +(c=a);c[0]=-a[0];c[1]=-a[1];c[2]=-a[2];c[3]=-a[3];return c},length:function(a){var c=a[0],d=a[1],f=a[2];a=a[3];return Math.sqrt(c*c+d*d+f*f+a*a)},squaredLength:function(a){var c=a[0],d=a[1],f=a[2];a=a[3];return c*c+d*d+f*f+a*a},lerp:function(a,c,d,f){f||(f=a);f[0]=a[0]+d*(c[0]-a[0]);f[1]=a[1]+d*(c[1]-a[1]);f[2]=a[2]+d*(c[2]-a[2]);f[3]=a[3]+d*(c[3]-a[3]);return f},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};a&&(a.glMatrixArrayType=j,a.MatrixArray=j,a.setMatrixArrayType=c,a.determineMatrixArrayType= +f,a.glMath=d,a.vec2=L,a.vec3=k,a.vec4=M,a.mat2=K,a.mat3=x,a.mat4=s,a.quat4=l);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:d,vec2:L,vec3:k,vec4:M,mat2:K,mat3:x,mat4:s,quat4:l}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"]; +PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"]; +PIXI.CompileVertexShader=function(a,c){for(var f="",d=0;da.length)){var c=this.uvs,f=this.indices,d=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;d[0]=1;d[1]=1;f[0]=0;f[1]=1;for(var a=a.length,g=1;ga.length)){var c=this.verticies,f=a[0],d,g=d=0,h=a[0];this.count-=0.2;c[0]=h.x+d;c[1]=h.y+g;c[2]=h.x-d;c[3]=h.y-g;for(var j=a.length,k=1;kk&&c.xk&&c.y< +k+h.height))return a.local.x=c.x,a.local.y=c.y,h}}return null}; +PIXI.InteractionManager.prototype.onMouseMove=function(a){a.preventDefault();var c=this.target.view.getBoundingClientRect();this.mouse.global.x=(a.clientX-c.left)*(this.target.width/c.width);this.mouse.global.y=(a.clientY-c.top)*(this.target.height/c.height);a=this.hitTest(this.mouse);this.currentOver!=a&&(this.currentOver&&(this.currentOver.mouseout&&this.currentOver.mouseout(this.mouse),this.currentOver=null),this.target.view.style.cursor="default");a&&this.currentOver!=a&&(this.currentOver=a,this.target.view.style.cursor= +"pointer",a.mouseover&&a.mouseover(this.mouse))};PIXI.InteractionManager.prototype.onMouseDown=function(a){var c=this.target.view.getBoundingClientRect();this.mouse.global.x=(a.clientX-c.left)*(this.target.width/c.width);this.mouse.global.y=(a.clientY-c.top)*(this.target.height/c.height);if(a=this.hitTest(this.mouse))this.currentDown=a,a.mousedown&&a.mousedown(this.mouse)}; +PIXI.InteractionManager.prototype.onMouseUp=function(){this.currentDown&&(this.currentDown.mouseup&&this.currentDown.mouseup(this.mouse),this.currentOver==this.currentDown&&this.currentDown.click&&this.currentDown.click(this.mouse),this.currentDown=null)}; +PIXI.InteractionManager.prototype.onTouchMove=function(a){a.preventDefault();var c=this.target.view.getBoundingClientRect();a=a.changedTouches;for(var f=0;fnnsJJHZiD)kC6T_m8LD0Sdx~~ znv$YGYpD>dB2bVrLuUr&dFS4_kMrDT@9nyChcXm868zQu->o-&*Ti`;ctY z68JDIX2+UmdkiEXvdV-{r6yo2hQBix1riZmp>+d6q^%8njz%7hYAnK=1hj=WW(7fj zOtK)SjTIu509K*0qN7MlN+<%jxY4YuOrnh9PfRX(rP$pqQWH$P&%h^2fc{Bs(VG)1 zdV+k3h6(`9I->aV#anikmbOW|NW?5#V5lX-{Y02~xOPK@MkA414ZJ*$b;X*Klm}Wi z%#7KAMl|U0TfZ(k(BZHz?=z1pFlGkllJGW>+v0ZuSdX}Tw>g2(F%4f0JH8+n0q7Hf z_p{^~kj4k0EHbYvOutm_x<7I9Fzs(iF8F?SxuMDH&X6+dnebF}38(@clKNd+QK;CPXXfMIozp!ist=w&SQNDkPbBCx zLegj^EHcmpy|`2)q={99Nz^1t$yi8aRvYO30`p^<<0WpAQrx9cSO;wcBuXfjQ|5WY z!y;}}RgFdqBOBu%WT7Hb5uJ}>CXfOR0~*GZ71vlsx?;FnD<9qLFL=?Ic;m*{y2O0k z=%*ux_m_K{?5x!F*cuL}@osk7@A2|~Gb^VJccY(2>meHc$u2yT>|gD*JXTvg!2Awr z$2Bbz^=bv_stl;~tHxxDvTjxBM;&peedJ!Z<6A*HzWW>>T_R&$ zDyPYqBIqCC$!2U}ofQzS4{|?p+E>dtQ`yEMqqlqWCh74f;saP$4^`*Iz*HUcYZe&~ zYMdEWB_^cL==*DW`g#b$D)>n9JEXSF9(Jhuil1L2Gh4icuZhZWQtQ%*C+!iev^Q z(Id`~O--9Hbw%Vefkw-sR9>3nyasgy`m;eZf{r6%z)1)bC}E22DBrvUVlJov)GwWm zznYW1hTBjOTG#K;Lzgs^Q(~S1E@||5>hx3g*eZ0cjBj{zH^}_Pp!wf?@}|tZfQ$Pp zZ@f_Jcl;X0oZ>MKR9!7Ums0P5=+xF9DmQ)1Z|)AV+saGt4(A}mAsQeoQ^2U%vja(u!J4#*aodu22T7L0t->yQtVpKD zjDl6XdE8bjCid(Yf6EJf)b<>Yv+1nDY^ldAmqC6$YPqAFMQbDj!`R7(cUgsPway6; z_xLS0;J^a%s#*R`=F~uK@w#fJM>JuGZe5k?$Ca&aM~|4lPUdzSg+agw&sk@%6LJdyQ8Q*kj-HTIZsYgWhLP?2Hes z@#eNkj+~z~ypy~f)A2+8XauT>#nm<8ybP#LqTXq8)GXDzT+^hqah8s;;9MPXqwh7- z^|3CA$|~-VXs}jLEp652B4uI!j*@Ucp9E!P z)nyyWx~vd@YlitA(D`6tVyAw!zV6Qj60Vfl9{CYGa3h!+M4J-5gNB>Kga7~iDKZW8 zch>NmwDM2xAW6n`JJZ%dVy~40G9XaC~_Xe Qxc~qF07*qoM6N<$g7q&LQ2+n{ literal 0 HcmV?d00001 diff --git a/src/pixi/DisplayObject.js b/src/pixi/DisplayObject.js index fa15e81..ef7aeff 100644 --- a/src/pixi/DisplayObject.js +++ b/src/pixi/DisplayObject.js @@ -71,6 +71,9 @@ PIXI.DisplayObject = function() this._cr = 1; this.renderable = false; + + // NOT YET :/ This only applies to children within the container.. + this.interactive = true; } // constructor diff --git a/src/pixi/DisplayObjectContainer.js b/src/pixi/DisplayObjectContainer.js index d2d1845..773b0fb 100644 --- a/src/pixi/DisplayObjectContainer.js +++ b/src/pixi/DisplayObjectContainer.js @@ -18,7 +18,7 @@ PIXI.DisplayObjectContainer = function() * @property children {Array} */ this.children = []; - + //s this.renderable = false; } @@ -131,7 +131,7 @@ PIXI.DisplayObjectContainer.prototype.updateTransform = function() if(!this.visible)return; PIXI.DisplayObject.prototype.updateTransform.call( this ); - + for(var i=0,j=this.children.length; i= 0; i--) + { + var child = children[i]; + + // only sprite's right now... + if(child instanceof PIXI.Sprite) + { + if(child.interactive)this.interactiveItems.push(child); + } + else + { + // use this to optimize.. + if(!child.interactive)continue; + } + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child); + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + this.target = target; + if(this.mouseoverEnabled)target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + target.view.addEventListener('mouseup', this.onMouseUp.bind(this), true); + target.view.addEventListener('mouseout', this.onMouseUp.bind(this), true); + + // aint no multi touch just yet! + target.view.addEventListener("touchstart", this.onTouchStart.bind(this), true); + target.view.addEventListener("touchend", this.onTouchEnd.bind(this), true); + target.view.addEventListener("touchmove", this.onTouchMove.bind(this), true); +} + +PIXI.InteractionManager.prototype.hitTest = function(interactionData) +{ + if(this.dirty) + { + this.dirty = false; + this.interactiveItems = []; + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage); + } + + var tempPoint = this.tempPoint; + var tempMatrix = this.tempMatrix; + var global = interactionData.global; + + var length = this.interactiveItems.length; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // TODO this could do with some optimizing! + // maybe store the inverse? + // or do a lazy check first? + //mat3.inverse(item.worldTransform, tempMatrix); + //tempPoint.x = tempMatrix[0] * global.x + tempMatrix[1] * global.y + tempMatrix[2]; + //tempPoint.y = tempMatrix[4] * global.y + tempMatrix[3] * global.x + tempMatrix[5]; + + // OPTIMIZED! assuming the matrix transform is affine.. which it totally shold be! + + var worldTransform = item.worldTransform; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + tempPoint.x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + tempPoint.y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + + var x1 = -item.width * item.anchor.x + + if(tempPoint.x > x1 && tempPoint.x < x1 + item.width) + { + var y1 = -item.height * item.anchor.y; + + if(tempPoint.y > y1 && tempPoint.y < y1 + item.height) + { + interactionData.local.x = tempPoint.x; + interactionData.local.y = tempPoint.y; + + return item; + } + } + } + + return null; +} + +PIXI.InteractionManager.prototype.onMouseMove = function(event) +{ + event.preventDefault(); + + // TODO optimize by not check EVERY TIME! maybe half as often? // + var rect = this.target.view.getBoundingClientRect(); + + this.mouse.global.x = (event.clientX - rect.left) * (this.target.width / rect.width); + this.mouse.global.y = (event.clientY - rect.top) * ( this.target.height / rect.height); + + var item = this.hitTest(this.mouse); + + if(this.currentOver != item) + { + if(this.currentOver) + { + if(this.currentOver.mouseout)this.currentOver.mouseout(this.mouse); + this.currentOver = null; + } + + this.target.view.style.cursor = "default"; + } + + if(item) + { + + if(this.currentOver == item)return; + + this.currentOver = item; + this.target.view.style.cursor = "pointer"; + + if(item.mouseover)item.mouseover(this.mouse); + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + var rect = this.target.view.getBoundingClientRect(); + this.mouse.global.x = (event.clientX - rect.left) * (this.target.width / rect.width); + this.mouse.global.y = (event.clientY - rect.top) * (this.target.height / rect.height); + + var item = this.hitTest(this.mouse); + if(item) + { + this.currentDown = item; + if(item.mousedown)item.mousedown(this.mouse); + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + if(this.currentDown) + { + if(this.currentDown.mouseup)this.currentDown.mouseup(this.mouse); + + if(this.currentOver == this.currentDown)if(this.currentDown.click)this.currentDown.click(this.mouse); + this.currentDown = null; + } +} + + +PIXI.InteractionManager.prototype.onTouchMove = function(event) +{ + event.preventDefault(); + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + + var touchData = this.touchs[touchEvent.identifier]; + + // update the touch position + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + } +} + +PIXI.InteractionManager.prototype.onTouchStart = function(event) +{ + event.preventDefault(); + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + + var touchData = this.pool.pop(); + if(!touchData)touchData = new PIXI.InteractionData(); + + this.touchs[touchEvent.identifier] = touchData; + + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var item = this.hitTest(touchData); + if(item) + { + touchData.currentDown = item; + if(item.touchstart)item.touchstart(touchData); + } + } +} + +PIXI.InteractionManager.prototype.onTouchEnd = function(event) +{ + event.preventDefault(); + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + if(touchData.currentDown) + { + if(touchData.currentDown.touchend)touchData.currentDown.touchend(touchData); + + var item = this.hitTest(touchData); + if(item == touchData.currentDown) + { + if(touchData.currentDown.tap)touchData.currentDown.tap(touchData); + } + touchData.currentDown = null; + } + + // remove the touch.. + this.pool.push(touchData); + this.touchs[touchEvent.identifier] = null; + } +} + +/** +@class InteractionData +@constructor +*/ +PIXI.InteractionData = function() +{ + /** + * This point stores the global coords of where the touch/mouse event happened + * @property global + * @type Point + */ + this.global = new PIXI.Point(); + + /** + * This point stores the local coords of where the touch/mouse event happened + * @property local + * @type Point + */ + this.local = new PIXI.Point(); +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + diff --git a/src/pixi/Sprite.js b/src/pixi/Sprite.js index fa23d1b..4b8954a 100644 --- a/src/pixi/Sprite.js +++ b/src/pixi/Sprite.js @@ -70,6 +70,73 @@ PIXI.Sprite = function(texture) } this.renderable = true; + + + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + + + // thi next bit is here for the docs... + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the sprite with thier mouse + * @method click + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user clicks the mouse down over the sprite + * @method mousedown + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the sprite + * for this callback to be fired the mouse must have been pressed down over the sprite + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the sprite + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the sprite + * @method mouseout + * @param interactionData {InteractionData} + */ + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with thier finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the sprite + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the sprite + * for this callback to be fired. The touch must have started over the sprite + * @method touchend + * @param interactionData {InteractionData} + */ } // constructor @@ -92,7 +159,19 @@ PIXI.Sprite.prototype.setTexture = function(texture) this.width = texture.frame.width; this.height = texture.frame.height; this.updateFrame = true; - +} + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.Sprite.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(stage)stage.dirty = true; } /** @@ -107,7 +186,6 @@ PIXI.Sprite.prototype.onTextureUpdate = function(event) // some helper functions.. - /** * * Helper function that creates a sprite that will contain a texture from the TextureCache based on the frameId diff --git a/src/pixi/Stage.js b/src/pixi/Stage.js index 75bea00..4abe469 100644 --- a/src/pixi/Stage.js +++ b/src/pixi/Stage.js @@ -8,8 +8,9 @@ A Stage represents the root of the display tree. Everything connected to the sta @extends DisplayObjectContainer @constructor @param backgroundColor {Number} the background color of the stage +@param interactive {Boolean} enable / disable interaction (default is false) */ -PIXI.Stage = function(backgroundColor) +PIXI.Stage = function(backgroundColor, interactive) { PIXI.DisplayObjectContainer.call( this ); @@ -19,6 +20,10 @@ PIXI.Stage = function(backgroundColor) this.childIndex = 0; this.stage= this; + // interaction! + this.interactive = interactive ? true : false; + this.interactionManager = new PIXI.InteractionManager(this); + this.setBackgroundColor(backgroundColor); } @@ -34,11 +39,21 @@ PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); PIXI.Stage.prototype.updateTransform = function() { this.worldAlpha = 1; - + for(var i=0,j=this.children.length; i>>>>>> Interactivity Added } return new PIXI.CanvasRenderer(width, height, view); diff --git a/src/yuidoc.json b/src/yuidoc.json index c4fb6a8..bdc5b2d 100644 --- a/src/yuidoc.json +++ b/src/yuidoc.json @@ -1,8 +1,8 @@ { "name": "Pixi.js API", - "logo": "../logo_small.png", - "description": "The Foo API: a library for doing X, Y, and Z", - "version": "0.9", + "logo": "http://www.goodboydigital.com/pixijs/logo_small.png", + "description": "Pixi.js is a fast lightweight 2D library that works across all devices.", + "version": "1.0", "url": "http://goodboydigital.com/", "options": { "outdir": "../docs"